dfs爆搜,相當慢……
#include#include#include#includeconst int m = 10;
const int p[10][10] = ,,,
,,,,
,,};const int w[10][10]=,,,
,,,,
,,};int a[m][m];
int line[m][m];
int column[m][m];
int pane[m][m];
int b[m*m+9][2];
long long ans=0;
int t;
int find1(long long x,long long tot)
return 0;
} t++;
if(t>12345000) return 0;//卡點小時
for(i=1;i加了一些優化,使用集合來進行表示,比單純地暴搜快了一倍
#include#include#include#includeusing namespace std;
int hang[10]=;//表示在第i行的數字j是否出現
int lie[10]=;
int gong[10]=;
int sit[10][10]=,,,
,,,,
,,,};
int score[10][10]=,,,
,,,,
,,,};
int map[10][10]=;
int b[82][2]=;
int ans=0;
void solve(int n,int r)
int x,y;
x=b[n][0];
y=b[n][1];
int a,b;
a=hang[x]|lie[y]|gong[sit[x][y]];//求並集
for(int i=1;i<=9;i++)
; //這個就不用解釋了吧
int nine[10][10] = ; //小九宮格裡每個數的使用標記,小九宮格的編號左到右,上到下,1,2,3,4,5,6,7,8,9
int line[10][10] = ; //行上每個數的使用標記
int row[10][10] = ; //列上每個數的使用標記
int fquel[10] = ; //被啟發後的行訪問順序
int fquer[10] = ; //被啟發後的列訪問順序
int value[10][10] = ; //地圖各點的價值因子
int quel[81] = ; //
int quer[81] = ; //與上面那個,是根據啟發後制定的搜尋順序的行列引數
int qlen = 0; //搜尋佇列的長度
int ans = -1; //最優解
int count = 0; //廢物變數,紀念原來我錯誤的寫法,懶得刪掉了
int swap(int *a,int *b)
void heu() //啟發函式
for(int i=1;i<=8;++i)
for(int j=9;j>=i+1;--j)
for(int i=1;i<=9;++i)
for(int j=1;j<=9;++j)
if(map[fquel[i]][fquer[j]] == 0)
// for(int i=1;i<=9;++i)
// cout<=0;k-=3)
}for(int k=6;k>=0;k-=3)
}// cout<#include#include#includeusing namespace std;
const int maxc=324+10;
const int maxr=729+10;
const int maxnode=maxr*4+maxc;
const int p[9][9]=,,
,,,,
,,};struct dlx
r[n]=0;
l[0]=n;
sz=n+1;
memset(s,0,sizeof s);
} void addrow(int r,vectorcolumns,int _get)
printf("%d\n", solver.solve());
return 0;
}
codevs1174 靶形數獨
題目鏈結 題解 可以預處理出已經填數字比較密集的區域開始搜尋來減少後續決策數 include include include using namespace std const int n 9 int s,tot,ans int a 10 10 struct dataf 10 10 int fen ...
靶形數獨(codevs 1174)
2009年noip全國聯賽提高組 時間限制 4 s 空間限制 128000 kb 題目等級 鑽石 diamond 題解檢視執行結果 小城和小華都是熱愛數學的好學生,最近,他們不約而同地迷上了數獨遊戲,好勝的他 們想用數獨來一比高低。但普通的數獨對他們來說都過於簡單了,於是他們向z 博士請教,z 博士...
codevs1174 靶形數獨
從wyh大佬那裡蹭來了乙份dlx的題解,然後進行了一番深刻的理解,最後自己手打了一遍,感覺受益頗多,最主要的是這個 融合了很多卡常技巧2333333333 和普通的dfs不同,這份 從根進行剪枝,每一層都取方案數最小的位置進行搜尋,因而得到十分顯著的優化,原來乙個點4s的題,現在20個點總共用時加起...