NOIP2009靶形數獨 位運算優化DFS

2021-07-12 06:30:54 字數 1130 閱讀 1233

題目在此

一道位運算優化dfs題目(大神們各種dancing link orz)

然而聽說這題可以直接從右下角開始爆搜(youngtree:強行把一道爆搜題做成位運算  我:excuse me?)

其實和爆搜填數獨的方法差不多,但是可以用位運算(即1和0)表示乙個格仔填了沒有以及先填哪個格仔、填什麼數,大大簡化了運算(畢竟不用迴圈找格仔填)

乙個小技巧:從空餘格仔最少的一行(或列——取決於你是逐行填還是逐列填)開始填

**如下:

#include #include #include #include using namespace std;

const int score[10][10]=,,,

,,,,

,,

};int emp[10],colu[10],rowu[10],coll[10],searchorder[10],map[10][10],latu[4][4];

int ans,i,j,p,sum,poss;

double log2(int a)

int init()

colu[i]|=p;

rowu[j]|=p;

latu[(i-1)/3][(j-1)/3]|=p;

}else

coll[i]++;

}for (i=1;i<=9;i++)

searchorder[i]=i;//搜尋順序:從已填數多的一行開始填

for (i=1;i<=8;i++)

for (j=i+1;j<=9;j++)

if (coll[searchorder[i]]>coll[searchorder[j]])

for(i=1;i<=9;i++)

if (coll[searchorder[i]]) break;

return i;

}void dfs(int k,int sum)

emp[col]-=first; }}

int main()

dfs(poss,sum);

if (!ans)

printf("-1");

else

printf("%d",ans);

return 0;

}

NOIP2009 靶形數獨

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

NOIP 2009 靶形數獨

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

noip2009 靶形數獨

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