NOIP2009 靶形數獨

2022-08-03 02:39:16 字數 1137 閱讀 1998

搜尋絕對是解決數獨問題的一大利器。

我們將不完整的數獨讀入。如果爆搜的話顯然涼涼o(2^81)?

想一下人類在玩數獨的時候會怎樣——找出填數比較多的行與列的交點,因為這樣能排除更多的非法選擇。

放到搜尋上就能減小搜尋樹的規模,降低時間複雜度。

我們統計每一行、每一列已經填完的數的數量,再統計每一行、每一列、每一小區域當中某乙個數是否出現。

每一次填數之前,找已經填數最多的一行與最多的一列的交點填(如果還沒填的話),當數獨都填完了以後統計一下得分即可

1 #include2

using

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 }

ac code

NOIP2009 靶形數獨

爆搜沒什麼好說的。剪枝思路 一開始將每個點可能取的值的數量統計出,排序,從小到大搜 然後貪心可行性 就是剩下的地方都填9,得分10 不過在vj上測85。日。加了卡時,2e7次之內跳出,總算過了。include include include include include include inclu...

NOIP 2009 靶形數獨

題目描述 小城和小華都是熱愛數學的好學生,最近,他們不約而同地迷上了數獨遊戲,好勝的他們想用數獨來一比高低。但普通的數獨對他們來說都過於簡單了,於是他們向 z 博士請教,z 博士拿出了他最近發明的 靶形數獨 作為這兩個孩子比試的題目。靶形數獨的方格同普通數獨一樣,在 9 格寬 9 格高的大九宮格中有...

noip2009 靶形數獨

靶形數獨 小城和小華都是熱愛數學的好學生,最近,他們不約而同地迷上了數獨遊戲,好勝的他 們想用數獨來一比高低。但普通的數獨對他們來說都過於簡單了,於是他們向 z 博士請教,z 博士拿出了他最近發明的 靶形數獨 作為這兩個孩子比試的題目。靶形數獨的方格同普通數獨一樣,在 9 格寬 9 格高的大九宮格中...