蒟蒻愛發題解啊,但是就算是神犇也有不知道咋做的題,更何況我這個中牛呢?是以就做了一個專欄,專門求助各路大咖神牛牛鬼蛇神,幫助本蒟蒻早日上中犇。
這個代碼的問題是時間超限,非常常見也是非常難搞的問題啊,主要是還沒有學過怎麼剪枝,是以在搜尋這塊兒有點拉跨,請各路高人幫助。
#include <bits/stdc++.h>
using namespace std;
int tu[10][10];
void show(){
for(int i = 0; i < 9; i++)
{
for(int j = 0; j < 9; j++)
cout << tu[i][j] << " ";
cout << endl;
}
exit(0);
}
bool check(int x,int y,int n)//判斷要填的數字是否重複 ,重複就傳回0 {
for(int i=0;i<9;i++){
if(tu[x][i]==n)return 0;//判斷列是否重複
if(tu[i][y]==n)return 0;//判斷行是否重複
}
//判斷每個方陣小格子數字是否重複
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
if(tu[i+x/3*3][j+y/3*3]==n)return 0;
return 1;
}
void dfs(int x,int y)//搜尋{
if(tu[x][y] != 0)//已經填過了{
if(x==8&&y==8)show();
if(y==8)dfs(x+1,0);
else dfs(x, y+1);
}
if(tu[x][y]==0)//如果沒填過的{
for(int i=1;i<=9;i++)//1~9每個數字填一遍{
if(check(x,y,i)){
tu[x][y]=i;
if(x==8&&y==8)show();
if(y==8)dfs(x+1,0);
else dfs(x,y+1);
tu[x][y]=0;
}
}
}
}
int main(){
for(int i=0;i<9;i++)
for(int j=0;j<9;j++)
cin >> tu[i][j];
dfs(0,0);
return 0;
}
這個求助的文章就不友善求騙贊了,但還是給點一個吧