搜尋絕對是解決數獨問題的一大利器。
我們將不完整的數獨讀入。如果爆搜的話顯然涼涼o(2^81)?
想一下人類在玩數獨的時候會怎樣——找出填數比較多的行與列的交點,因為這樣能排除更多的非法選擇。
放到搜尋上就能減小搜尋樹的規模,降低時間複雜度。
我們統計每一行、每一列已經填完的數的數量,再統計每一行、每一列、每一小區域當中某乙個數是否出現。
每一次填數之前,找已經填數最多的一行與最多的一列的交點填(如果還沒填的話),當數獨都填完了以後統計一下得分即可
1 #include2ac codeusing
namespace
std;
3int a[10][10],h[10][10],s[10][10],f[10][10];4
int hnum[10],snum[10];5
int ans=-1
,num;
6int calc(int i,intj)7
10int sum[10][10]=11,
13 ,
14 ,
15 ,
16 ,
17 ,
18 ,
19 ,
20 ,
21 ,
22};
23 inline int
total()
2431
void dfs(int x,int y,int
z)32
38for(int k=1;k<=9;k++)
3961}62
intmain()
6378}79
int x=0,y=0,maxx=-1,maxy=-1;80
for(int i=1;i<=9;i++)
81if(hnum[i]>maxx&&hnum[i]<9) maxx=hnum[i],x=i;
82for(int j=1;j<=9;j++)
83if(snum[j]>maxy&&!a[x][j]) maxy=snum[j],y=j;
84dfs(x,y,num);
85 cout<
86return0;
87 }
NOIP2009 靶形數獨
爆搜沒什麼好說的。剪枝思路 一開始將每個點可能取的值的數量統計出,排序,從小到大搜 然後貪心可行性 就是剩下的地方都填9,得分10 不過在vj上測85。日。加了卡時,2e7次之內跳出,總算過了。include include include include include include inclu...
NOIP 2009 靶形數獨
題目描述 小城和小華都是熱愛數學的好學生,最近,他們不約而同地迷上了數獨遊戲,好勝的他們想用數獨來一比高低。但普通的數獨對他們來說都過於簡單了,於是他們向 z 博士請教,z 博士拿出了他最近發明的 靶形數獨 作為這兩個孩子比試的題目。靶形數獨的方格同普通數獨一樣,在 9 格寬 9 格高的大九宮格中有...
noip2009 靶形數獨
靶形數獨 小城和小華都是熱愛數學的好學生,最近,他們不約而同地迷上了數獨遊戲,好勝的他 們想用數獨來一比高低。但普通的數獨對他們來說都過於簡單了,於是他們向 z 博士請教,z 博士拿出了他最近發明的 靶形數獨 作為這兩個孩子比試的題目。靶形數獨的方格同普通數獨一樣,在 9 格寬 9 格高的大九宮格中...