#include <cstdio> #include <cstdlib> using namespace std; int a[9][9]; int dfs(int m); bool canplace(int row, int col, int num); void output(); int main() { int i, j; for(i = 0; i < 9; i ++) for(j = 0; j < 9; j ++) scanf("%d", &a[i][j]); dfs(0); return 0; } bool canplace(int row, int col, int num) { int i, j, trow, tcol; trow = row / 3 * 3;//找到在该小方格的左上方格子 tcol = col / 3 * 3; for(i = 0; i < 9; i ++)//行列无冲突 if(a[row][i] == num || a[i][col] == num) return 0; for(i = 0; i < 3; i ++)//小方格内无冲突 for(j = 0; j < 3; j ++) if(a[trow + i][tcol + j] == num) return 0; return 1; } void output() { for(int i = 0; i < 9; i ++) for(int j = 0; j < 9; j ++) printf("%d%c", a[i][j], j==8?'\n':' '); exit(0); } int dfs(int m)//rol = m / 9; col = m % 9; { int row = m / 9; int col = m % 9; if(m == 81) output(); if(a[row][col] > 0) dfs(m + 1);//如果是题目已知的点,则放下一个 else { for(int i = 1; i <= 9; i++) if(canplace(row, col, i)) { a[row][col] = i; dfs(m + 1); a[row][col] = 0;//回溯 } } }
洛谷P1784_数独游戏
猜你喜欢
转载自blog.csdn.net/jay__bryant/article/details/80246482
今日推荐
周排行