| ||||||||||
Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:正着搜也过了,不过时间多了点In Reply To:正着搜也过了,不过时间多了点 Posted by:315410110 at 2009-03-31 13:37:55 > #include <iostream> > using namespace std; > > bool row[10][10],col[10][10],sqr[10][10]; > int a[10][10]; > char c[9][10]; > bool solve() > { > int i,j,k; > for (i = 1; i < 10; ++i) > for (j = 1; j < 10; ++j) > { > if (a[i][j] == 0) > { > for (k = 1; k < 10; ++k) > { > if (!row[i][k] && !col[j][k] && !sqr[(i-1)/3*3+(j-1)/3+1][k]) > { > a[i][j] = k; > row[i][k] = true; > col[j][k] = true; > sqr[(i-1)/3*3+(j-1)/3+1][k] = true; > if (solve()) > return true; > else > { > a[i][j] = 0; > row[i][k] = false; > col[j][k] = false; > sqr[(i-1)/3*3+(j-1)/3+1][k] = false; > } > } > } > if (k == 10) > return false; > } > } > return true; > } > > int main() > { > int n; > cin >> n; > while (n--) > { > int i,j; > memset(row,false,sizeof(row)); > memset(col,false,sizeof(col)); > memset(sqr,false,sizeof(sqr)); > getchar(); > for (i = 0; i < 9; ++i) > cin >> c[i]; > for (i = 1; i < 10; ++i) > { > for (j = 1; j < 10; ++j) > { > > a[i][j] = c[i-1][j-1] - '0'; > row[i][a[i][j]] = true; > col[j][a[i][j]] = true; > sqr[(i-1)/3*3+(j-1)/3+1][a[i][j]] = true; > } > } > solve(); > for (i = 1; i < 10; ++i) > { > for (j = 1; j < 10; ++j) > cout << a[i][j]; > cout << endl; > } > } > return 0; > } #include <iostream> using namespace std; bool row[10][10],col[10][10],sqr[10][10]; int a[10][10]; char c[9][10]; bool solve() { int i,j,k; for (i = 9; i>0; --i) for (j = 9; j >0; --j) { if (a[i][j] == 0) { for (k = 1; k < 10; ++k) { if (!row[i][k] && !col[j][k] && !sqr[(i-1)/3*3+(j-1)/3+1][k]) { a[i][j] = k; row[i][k] = true; col[j][k] = true; sqr[(i-1)/3*3+(j-1)/3+1][k] = true; if (solve()) return true; else { a[i][j] = 0; row[i][k] = false; col[j][k] = false; sqr[(i-1)/3*3+(j-1)/3+1][k] = false; } } } if (k == 10) return false; } } return true; } int main() { int n; cin >> n; while (n--) { int i,j; memset(row,false,sizeof(row)); memset(col,false,sizeof(col)); memset(sqr,false,sizeof(sqr)); getchar(); for (i = 0; i < 9; ++i) cin >> c[i]; for (i = 1; i < 10; ++i) { for (j = 1; j < 10; ++j) { a[i][j] = c[i-1][j-1] - '0'; row[i][a[i][j]] = true; col[j][a[i][j]] = true; sqr[(i-1)/3*3+(j-1)/3+1][a[i][j]] = true; } } solve(); for (i = 1; i < 10; ++i) { for (j = 1; j < 10; ++j) cout << a[i][j]; cout << endl; } } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator