Luogu P1074 靶形數獨

2021-09-11 02:08:12 字數 1534 閱讀 7851

#include

using

namespace std;

struct consult_row_0

;struct consult_row_0 dic_row_0[10]

;//查詢第幾行有幾個0

int origin[10]

[10];

//輸入的數獨

bool row[10]

[10], column[10]

[10], box[10]

[10];

//存行,列,宮1~9的使用情況

int point_reach[

100][4

];//存到達點的x,y,box,value

int temp_max =-1

;//初始化答案

int point_counter;

//到達點的計數器

int origin_value;

//數獨原有已填數的價值和

intconsult_box

(int x,

int y)

//查詢在第幾宮

intconsult_value

(int i,

int j)

//查詢乙個位置的價值數

if(i ==

2|| i ==

8|| j ==

2|| j ==8)

if(i ==

3|| i ==

7|| j ==

3|| j ==7)

if(i ==

4|| i ==

6|| j ==

4|| j ==6)

return10;

}void

dfs(

int point_num_reach,

int total_value_now)

//字面意

return;}

for(

int i =

1; i <=

9; i++

)//分1~9填數}}

bool

cmp(consult_row_0 a, consult_row_0 b)

//排序用

intmain()

for(

int i =

1; i <=

9; i++

)else}}

sort

(dic_row_0 +

1, dic_row_0 +

10, cmp)

;//按行中0個數公升序排序

for(

int i =

1; i <=

9; i++

)//依次訪問點}}

dfs(

0, origin_value)

;//遞迴

cout << temp_max << endl;

//輸出

return0;

//完工大吉

}

對於行中未知數個數公升序排序,減少搜尋次數,然後電風扇

luogu P1074 靶形數獨

比較基礎的搜尋剪枝題。幾個優化就可以過了 用lowbit代替查詢可以填的數 用並集來維護什麼數不能填 優先考慮 最小可能性的位置 講道理我用堆維護還t了。然後就可以在 m n是數獨大小,m是可以填的種類數量 解決 實際測試中,遠遠不到這個上界 include using namespace std ...

luogu P1074 靶形數獨

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

luoguP1074 靶形數獨(搜尋)

傳送門 75分,太菜,不會優化了,吐了。幾點優化。1.先搜尋容易確定的位置 2.從中心往周圍搜 3.列舉數字的時候倒序列舉 4.如果沒有列舉到的數字都是最優情況的話也不能比當前ans大就剪枝 5.位運算 include include include define max x,y x y x y d...