乍眼一看,有點蒙(畢竟本人是蒟蒻嘛)
本人蒟蒻,所以只能寫出蒟蒻程式。
言歸正傳:
本題為深搜題;
本題的重點——從**開始搜尋;(這是乙個剪枝的機會)
解決方法:
用結構體排序,兩個參量,乙個用於儲存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 格高的大九宮格中有...