NOIP 2009 提高組 第四題 靶型數獨正解

2021-09-11 00:22:39 字數 1379 閱讀 7721

乍眼一看,有點蒙(畢竟本人是蒟蒻嘛)

本人蒟蒻,所以只能寫出蒟蒻程式。

言歸正傳:

本題為深搜題;

本題的重點——從**開始搜尋;(這是乙個剪枝的機會)

解決方法:

用結構體排序,兩個參量,乙個用於儲存0的個數,另乙個用於儲存行號,例如

0 0 0 2 0 0 0 8 0 //7個

7 0 0 9 0 0 0 0 1 //6個

1 0 0 0 0 5 9 0 0 //6個

0 0 5 0 2 0 0 0 3 //6個

0 0 0 0 0 0 6 4 8 //6個

4 1 3 0 0 0 0 0 0 //6個

0 0 7 0 0 2 0 9 0 //6個

2 0 1 0 6 0 8 0 4 //4個

0 8 0 5 0 4 0 1 2 //4個

如果從第一行開始掃,肯定沒有從最後一行掃要快(可以計算一下)

所以,本蒟蒻就定義了以下結構體:

struct node

有了這個剪枝,與不怕超時了(可能還有其他剪枝,但這乙個就夠了)

ac**:

#include using namespace std;

int queue1[110];//儲存行

int queue2[110];//儲存列

int queue3[110];//儲存宮

int queue4[110];//儲存在靶中的分數

int innumber[10][10];//輸入資料

bool palace[10][10];//判斷宮

bool line1[10][10];//判斷行

bool line2[10][10];//判斷列

int acanswer=-1;//答案

const int n=9;//大小

int num=1;//記錄0在資料**現的總個數

struct int

nmnumber[10];//用於排序

int pala(int x,int y)//此函式是用於判斷第x行,第y列的所在宮

else if(3>innumber[i][j];

if(innumber[i][j]>0)

else//記錄0在每一行的個數,用於排序

} }sort(nmnumber+1,nmnumber+1+n,cmp);//進行排序

for(int i=1;i<=n;i++)

}} num--;

depth_first_search(sum,1);//搜尋

cout

}

NOIP2009提高組 靶形數獨

題目 洛谷p1074 vijos p1755 codevs1174。題目大意 給你乙個數獨,讓你填完這個數獨,並要求得分最大,問這個得分是多少 不能填完輸出 1 每個格仔的得分是當前格仔所填的數乘格仔的分值。格仔的分值如下 解題思路 暴力搜尋。然而不加優化的搜尋是一定會超時的。我用了這幾個優化就過了...

NOIP2009 靶形數獨

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

NOIP 2009 靶形數獨

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