训练总结8.4

xiaoxiao2021-02-27  227

今天遇到了数独题,记得曾经见过,但是第一感觉太复杂掠过去,今天发现了其中不少的问题,搜索的时候 那个点带进值的时候要试一下合不合适,每一行,每一列的还比较好说,重要的是,在小的九方格 里的判断。下标 x和y, 九方格左上角的下标是x-x%3, y-y%3 。真的困在这个数独题上还是 好久。 数独链接 今天还遇到一道 不太一样搜索题,搜索的带有方向 链接 ,最短路径的很简单,最主要的是 向右,和向左走的方向问题。 code: #if 0 #include<iostream> using namespace std; int a[15][15],cnt; bool flag=0; int ok(int x,int y,int k) { for(int i=0; i<9; i++) { if(a[x][i]==k) return 0; if(a[i][y]==k) return 0; } int sx=x-x%3; int sy=y-y%3; for(int i=sx; i<sx+3; i++) { for(int j=sy; j<sy+3; j++) { if(a[i][j]==k) return 0; } } return 1; } void dfs(int num) { bool flag1=0; int x,y; if(num==cnt) { for(int i=0; i<9; i++) { for(int j=0; j<9; j++) { cout<<a[i][j]; } cout<<endl; } flag=1; return; } if(flag) return; for(int i=0; i<9; i++) { for(int j=0; j<9; j++) { if(a[i][j]==0) { flag1=1; x=i;y=j; break; } } if(flag1) break; } for(int k=1; k<=9; k++) { if(ok(x,y,k)) { a[x][y]=k; dfs(num+1); a[x][y]=0; } } } int main() { int N; char c; cin>>N; while(N--) { flag=0; cnt=0; for(int i=0; i<9; i++) { for(int j=0; j<9; j++) { cin>>c; a[i][j]=c-'0'; if(a[i][j]==0) cnt++; } } dfs(0); } } #endif
转载请注明原文地址: https://www.6miu.com/read-11056.html

最新回复(0)