a016. 數獨(SUDOKU)
| From: [120.126.194.130]
|
發表日期:
2011-10-07 05:20
#include<stdio.h>
int a,b,c,final[4];
int sudoku[10][10];
int test(int x,int y){
for(a=1;a<=3;a++){
for(b=1;b<=3;b++){
for(c=1;c<=3;c++){
if (( (sudoku[x+a-1][y+b-1]==sudoku[x][y+c-1] && a != 1) || (sudoku[x+a-1][y+b-1]==sudoku[x+1][y+c-1] && a!=2 ) || (sudoku[x+a-1][y+b-1]==sudoku[x+2][y+c-1] && a!=3) ) && b!=c){return 0; break;}
}
}
}
return 1;
}
int finaltest(){
for(a=1;a<=9;a++){
for(b=1;b<=9;b++){
for(c=1;c<=9;c++){
if ((sudoku[a][b]==sudoku[a][c] || sudoku[b][a]==sudoku[c][a] ) && b!=c){return 0; break;}
}
}
}
return 1;
}
int main(){
for (final[3]=1;final[3]<=2;final[3]++){
for (a=1;a<=9;a++){
for(b=1;b<=9;b++){
scanf("%1d",&sudoku[a][b]);
}
}
final[final[3]]=test(1,1)+test(4,1)+test(7,1)+test(1,4)+test(4,4)+test(7,4)+test(1,7)+test(4,7)+test(7,7)+finaltest();
}
if (final[1] == 10){printf("yes\n");}else{printf("no\n");}
if (final[2] == 10){printf("yes\n");}else{printf("no\n");}
return 0;
}