这两天的总结都是第二天发布的害 娱乐时间总是不会想起干正事的
决定从这一篇起加上题目标题(好像什么水题都能拿得出手一样>>>>>>>>>直达??还没捣鼓出来
===================================分割线===================================
#include <iostream> #include <cstring> #include <queue> #include <math.h> #include <map> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; int a[10][10]; int line[10][10],row[10][10],block[10][10]; int n,m,flag; struct point{int l,x,y;}; typedef pair<point,int>p; int dx[]={0,0,-1,1}; int dy[]={1,-1,0,0}; point now,newo,ende; queue<p> qu; inline int read(){ int x=0,f=1;char c=getchar(); while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-1;c=getchar();} while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘;c=getchar();} return x*f; } inline void clean(){ memset(a,0,sizeof(a)); memset(line,0,sizeof(line)); memset(row,0,sizeof(row)); memset(block,0,sizeof(block)); flag=0; } int go(int i,int j){ if(i>0 && i<4 && j>0 && j<4)return 1; if(i>3 && i<7 && j>0 && j<4)return 2; if(i>6 && i<10 && j>0 && j<4)return 3; if(i>0 && i<4 && j>3 && j<7)return 4; if(i>3 && i<7 && j>3 && j<7)return 5; if(i>6 && i<10 && j>3 && j<7)return 6; if(i>0 && i<4 && j>6 && j<10)return 7; if(i>3 && i<7 && j>6 && j<10)return 8; return 9; } void print(){ for(int i=1;i<=9;i++){ for(int j=1;j<=9;j++) cout<<a[i][j]; cout<<endl; } } void dfs(int i,int j){ if(!flag){ if(i==9){ if(j==9 && a[i][j]) j++; if(j==10) {print();flag=1;} } if(j>9){i++,j=1;} if(!a[i][j]){ for(int p=1;p<=9;p++){ if(!row[i][p] && !line[j][p] && !block[go(i,j)][p]){ a[i][j]=p,line[j][p]=1,row[i][p]=1,block[go(i,j)][p]=1; dfs(i,j+1); a[i][j]=0,row[i][p]=0,line[j][p]=0,block[go(i,j)][p]=0; } } return; } dfs(i,j+1); } } int main() { n=read(); char ll; int temp; while(n--){ clean(); for(int j=1;j<=9;j++){ for(int i=1;i<=9;i++){ ll=getchar(); temp=ll-‘0‘; a[j][i]=temp;line[i][temp]=1;row[j][temp]=1;block[go(j,i)][temp]=1; } ll=getchar(); } dfs(1,1); } return 0; }
20200201新的一个月继续写搜索 POJ - 2676 Sudoku
原文:https://www.cnblogs.com/tabshh/p/12247538.html