/**
* æ°ç¬æ±è§£ç¨åº
* è¾å
¥æ¹å¼ï¼ä»¥è¡ä¸ºåä½ï¼æç
§ 9*9 å®«æ ¼çæ¹å¼ï¼æ¯è¾å
¥ä¸è¡æä¸ä¸ä¸ªå车ï¼ç©ºæ ¼ç¨ 0 表示
* ä¾å¦ï¼
* input >
* 000003080 [Enter]
* 030000090 [Enter]
* 800090003 [Enter]
* 000080905 [Enter]
* 009007800 [Enter]
* 106000000 [Enter]
* 600040008 [Enter]
* 040000010 [Enter]
* 090800000 [Enter]
* output >
* 9 1 2 4 5 3 6 8 7
* 5 3 4 6 7 8 1 9 2
* 8 6 7 2 9 1 4 5 3
*
* 2 7 3 1 8 4 9 6 5
* 4 5 9 3 6 7 8 2 1
* 1 8 6 9 2 5 3 7 4
*
* 6 2 1 7 4 9 5 3 8
* 7 4 8 5 3 6 2 1 9
* 3 9 5 8 1 2 7 4 6
*/
#include
using namespace std;
/* æé 宿æ å¿ */
bool sign = false;
/* å建æ°ç¬ç©éµ */
int num[9][9];
/* 彿°å£°æ */
void Input();
void Output();
bool Check(int n, int key);
int DFS(int n);
/* 䏻彿° */
int main()
{
cout << "请è¾å
¥ä¸ä¸ª9*9çæ°ç¬ç©éµï¼ç©ºä½ä»¥0表示:" << endl;
Input();
DFS(0);
Output();
system("pause");
}
/* 读å
¥æ°ç¬ç©éµ */
void Input()
{
char temp[9][9];
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
cin >> temp[i][j];
num[i][j] = temp[i][j] - '0';
}
}
}
/* è¾åºæ°ç¬ç©éµ */
void Output()
{
cout << endl;
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
cout << num[i][j] << " ";
if (j % 3 == 2)
{
cout << " ";
}
}
cout << endl;
if (i % 3 == 2)
{
cout << endl;
}
}
}
/* 夿keyå¡«å
¥næ¶æ¯å¦æ»¡è¶³æ¡ä»¶ */
bool Check(int n, int key)
{
/* 夿næå¨æ¨ªåæ¯å¦åæ³ */
for (int i = 0; i < 9; i++)
{
/* j为nç«åæ */
int j = n / 9;
if (num[j][i] == key) return false;
}
/* 夿næå¨ç«åæ¯å¦åæ³ */
for (int i = 0; i < 9; i++)
{
/* j为næ¨ªåæ */
int j = n % 9;
if (num[i][j] == key) return false;
}
/* x为næå¨çå°ä¹å®«æ ¼å·¦é¡¶ç¹ç«åæ */
int x = n / 9 / 3 * 3;
/* y为næå¨çå°ä¹å®«æ ¼å·¦é¡¶ç¹æ¨ªåæ */
int y = n % 9 / 3 * 3;
/* 夿næå¨çå°ä¹å®«æ ¼æ¯å¦åæ³ */
for (int i = x; i < x + 3; i++)
{
for (int j = y; j < y + 3; j++)
{
if (num[i][j] == key) return false;
}
}
/* å
¨é¨åæ³ï¼è¿åæ£ç¡® */
return true;
}
/* æ·±ææé æ°ç¬ */
int DFS(int n)
{
/* ææçé½ç¬¦åï¼éåºéå½ */
if (n > 80)
{
sign = true;
return 0;
}
/* å½åä½ä¸ä¸ºç©ºæ¶è·³è¿ */
if (num[n / 9][n % 9] != 0)
{
DFS(n + 1);
}
else
{
/* å¦å对å½åä½è¿è¡æä¸¾æµè¯ */
for (int i = 1; i <= 9; i++)
{
/* 满足æ¡ä»¶æ¶å¡«å
¥æ°å */
if (Check(n, i) == true)
{
num[n / 9][n % 9] = i;
/* ç»§ç»æç´¢ */
DFS(n + 1);
/* è¿åæ¶å¦ææé æåï¼åç´æ¥éåº */
if (sign == true) return 0;
/* 妿æé 䏿åï¼è¿åå½åä½ */
num[n / 9][n % 9] = 0;
}
}
}
}