# 數獨 ````cpp= #include <iostream> #include <fstream> using namespace std; void readFile(char filename[],int Q[][9]) { int r,c; ifstream f1; f1.open(filename); for(r=0;r<9;r++) { for(c=0;c<9;c++) { f1 >> Q[r][c]; } } f1.close(); } void print(int Q[][9]) { int r,c; for(r=0;r<9;r++) { for(c=0;c<9;c++) { if(Q[r][c]==0) { cout << " "; } else { cout << Q[r][c] << " "; } } cout << endl; } } void update(int A[][9][10],int r,int c,int a) { int m,n; A[r][c][0] = a; for(m=1;m<=9;m++) A[r][c][m] = 0; for(m=0;m<9;m++) A[r][m][a] = 0; for(m=0;m<9;m++) A[m][c][a] = 0; for(m=r/3*3;m<=r/3*3+2;m++) { for(n=c/3*3;n<=c/3*3+2;n++) { A[m][n][a] = 0; } } A[r][c][a] = 1; } int onlyyou(int A[][9][10],int r,int c) { int count = 0, a, i; for(i=1;i<=9;i++) { if(A[r][c][i]>0) { count++; a = i; } } if(count==1) return a; else return 0; } void init(int Q[][9],int A[][9][10]) { int r,c,i; for(r=0;r<9;r++) { for(c=0;c<9;c++) { A[r][c][0] = 0; for(i=1;i<=9;i++) A[r][c][i] = 1; } } for(r=0;r<9;r++) { for(c=0;c<9;c++) { if(Q[r][c]>0) { update(A,r,c,Q[r][c]); } } } } int main() { int Q[9][9]; int A[9][9][10]; int ANS[9][9]; readFile("Q3.txt",Q); print(Q); init(Q,A); int r,c,a,flag = 0; do{ flag = 0; for(r=0;r<9;r++) { for(c=0;c<9;c++) { if(A[r][c][0]==0) { a = onlyyou(A,r,c); if(a>0) { update(A,r,c,a); flag = 1; } } } } }while(flag==1); for(r=0;r<9;r++) { for(c=0;c<9;c++) { ANS[r][c] = A[r][c][0]; } } print(ANS); return 0; } ````