首页 > 代码库 > 数独 dfs
数独 dfs
@_@ 题目:
(⊙v⊙)嗯,代码:
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 5 const int N = 9; 6 const int Group[9][9] = { 7 0, 0, 0, 1, 1, 1, 2, 2, 2, 8 0, 0, 0, 1, 1, 1, 2, 2, 2, 9 0, 0, 0, 1, 1, 1, 2, 2, 2,10 3, 3, 3, 4, 4, 4, 5, 5, 5,11 3, 3, 3, 4, 4, 4, 5, 5, 5,12 3, 3, 3, 4, 4, 4, 5, 5, 5,13 6, 6, 6, 7, 7, 7, 8, 8, 8,14 6, 6, 6, 7, 7, 7, 8, 8, 8,15 6, 6, 6, 7, 7, 7, 8, 8, 816 };17 18 int a[N][N],Line[N][N],Column[N][N],group[N][N]; 19 20 int print() {21 for(int i=0; i<N; i++) {22 for(int j=0; j<N; j++)23 cout<<a[i][j]+1<<" ";24 cout<<endl;25 }26 }27 28 void dfs(int x,int y) {29 if(x == N) {30 print();31 return ;32 }33 int nxt_x = x,nxt_y = y + 1;34 if(nxt_y == N) nxt_x = x + 1,nxt_y = 0; 35 36 if(a[x][y] >= 0) dfs(nxt_x,nxt_y);37 else {38 for(int i=0; i<N; i++) {39 if(!Line[x][i] && !Column[y][i] && !group[Group[x][y]][i]) {40 Line[x][i] = Column[y][i] = group[Group[x][y]][i] = 1;41 42 a[x][y] = i;43 dfs(nxt_x,nxt_y);44 a[x][y] = -1;45 46 Line[x][i] = Column[y][i] = group[Group[x][y]][i] = 0;47 }48 }49 }50 }51 52 int main() {53 for(int i=0; i<N; i++)54 for(int j=0; j<N; j++)55 cin>>a[i][j], a[i][j]--;56 for(int i=0; i<N; i++)57 for(int j=0; j<N; j++)58 if(a[i][j] >= 0) {59 Line[i][a[i][j]] = 1,60 Column[j][a[i][j]] = 1,61 group[Group[i][j]][a[i][j]] = 1;62 }63 dfs(0,0);64 return 0;65 }
思路就是纯粹的dfs,类似于八皇后的问题
数独 dfs
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。