#include <iostream>
using namespace std;
bool res(int arr[][9], int x, int y, int n)
{
//行列有无重复
for (int i = 0; i < 9; i++)
{
if (arr[x][i]==n)
{
return false;
}
if (arr[i][y] == n)
{
return false;
}
}
//小九宫格有无重复
for (int i = x/3*3; i < (x/3+1)*3; i++)
{
for (int j = y / 3 * 3; j < (y / 3 + 1) * 3; j++)
{
if (arr[i][j]==n)
{
return false;
}
}
}
return true;
}
void dfs(int table[][9], int x, int y)
{
if (x==9)
{
//打印
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
cout << table[i][j];
}
cout << endl;
}
//结束
exit(0);
}
//零表示未填,是否未填
if (table[x][y]==0)
{
for (int i = 1; i <=9; i++)
{
//是否可走
if (res(table,x,y,i))
{
table[x][y] = i;
dfs(table, x + (y + 1) / 9, (y + 1) % 9);
}
}
//回溯
table[x][y] = 0;
}
else
{
//如果未填继续查找下一个位置
dfs(table, x + (y + 1) / 9, (y + 1) % 9);
}
}
int main()
{
int arr[9][9] = {
{0,0,5,3,0,0,0,0,0},
{8,0,0,0,0,0,0,2,0},
{0,7,0,0,1,0,5,0,0},
{4,0,0,0,0,5,3,0,0},
{0,1,0,0,7,0,0,0,6},
{0,0,3,2,0,0,0,8,0},
{0,6,0,5,0,0,0,0,9},
{0,0,4,0,0,0,0,3,0},
{0,0,0,0,0,9,7,0,0} };
dfs(arr, 0, 0);
return 0;
}
C++,DFS深度优先,数独游戏
最新推荐文章于 2024-07-18 20:38:17 发布