HDU 1426(Sudoku Killer)解题纠错
2011-08-20 07:35
447 查看
以下来自点击打开链接
问题出在不能正确处理多组输入。如下修改main可以AC:
# include<stdio.h> # include<string.h> struct node{ int x,y; }; struct node point[100];//存入“?”的坐标 char map[10][10]; int k,n,t,flag; int check(int n,int x,int y)//检查是否将n填入(x,y)点 { int i,j; for(i=0;i<9;i++)//(x,y)所在的那一行 if(map[x][i]-'0'==n) return 0; for(i=0;i<9;i++)//(x,y)所在的那一列 if(map[i][y]-'0'==n) return 0; for(i=x/3*3;i<=x/3*3+2;i++)//(x,y)所在的那个小的九宫格 for(j=y/3*3;j<=y/3*3+2;j++) if(map[i][j]-'0'==n) return 0; return 1; } void DFS(int n) { int i,j; if(n==k)//输出 { i=0; if(flag) printf("\n"); for(i=0;i<9;i++) { for(j=0;j<9;j++) { if(j==0) printf("%c",map[i][j]); else printf(" %c",map[i][j]); } printf("\n"); } flag=1; return ; } for(i=1;i<=9;i++) { if(check(i,point .x,point .y)) { map[point .x][point .y]=i+'0'; DFS(n+1); map[point .x][point .y]='?'; } } } int main() { int i,j,flag=0; while(scanf("%c %c %c %c %c %c %c %c %c",&map[0][0],&map[0][1],&map[0][2],&map[0][3],&map[0][4],&map[0][5],&map[0][6],&map[0][7],&map[0][8])!=EOF) { getchar(); flag=0; for(i=1;i<=8;i++) { scanf("%c %c %c %c %c %c %c %c %c",&map[i][0],&map[i][1],&map[i][2],&map[i][3],&map[i][4],&map[i][5],&map[i][6],&map[i][7],&map[i][8]); getchar(); } k=0; for(i=0;i<9;i++) for(j=0;j<9;j++) if(map[i][j]=='?') { point[k].x=i; point[k++].y=j; } DFS(0); } return 0; }
问题出在不能正确处理多组输入。如下修改main可以AC:
int main() { int i,j,flag=0; do //改 while(scanf("%c %c %c %c %c %c %c %c %c",&map[0][0],&map[0][1],&map[0][2],&map [0][3],&map[0][4],&map[0][5],&map[0][6],&map[0][7],&map[0][8])!=EOF)//读取数独的第一行 { //改 getchar(); flag=0; for(i=0;i<=8;i++) //改 for(i=1;i<=8;i++)//for循环读取剩余的八行 { scanf("%c %c %c %c %c %c %c %c %c",&map[i][0],&map[i][1],&map[i][2],&map[i][3],&map[i][4],&map[i][5],&map[i][6],&map[i][7],&map[i][8]); getchar(); } k=0; for(i=0;i<9;i++) for(j=0;j<9;j++) if(map[i][j]=='?')//记录要填的数的位置,k为未知数“?”的个数 { point[k].x=i; point[k++].y=j; } DFS(0);//开始深搜 } while(getchar() == '\n');//加 return 0; }
相关文章推荐
- hdu 1426 Sudoku Killer(DFS 数独问题)
- HDU-1426-Sudoku Killer【DFS】
- HDU 1426 Sudoku Killer DFS
- HDU 1426 Sudoku Killer(数独,划分区域是关键)
- HDU 1426 Sudoku Killer(dfs)
- hdu 1426 Sudoku Killer
- HDU 1426 Sudoku Killer ( 暴力dfs 输入输出格式坑)
- 杭电 HOJ 1426 Sudoku Killer 解题报告
- HDU 1426--Sudoku Killer【DFS】
- HDU 1426 Sudoku Killer (回溯 + 剪枝)
- hdu 1426 Sudoku Killer(深度优先搜索)
- hdu 1426 Sudoku Killer(DFS)
- Problem Y:Sudoku Killer(HDU 1426)
- HDU - 1426 Sudoku Killer(DFS)
- hdu-1426-Sudoku Killer(dfs)
- HDU - 1426 Sudoku Killer
- hdu 1426 Sudoku Killer(DFS)
- [HDU 1426] Sudoku Killer 数独
- HDU 1426 Sudoku Killer
- hdu 1426 Sudoku Killer(DFS)