以前也想過很久解數獨的演算法,但是沒有得到很簡單的方法,某天看到某位學長的**,恍然大悟,本以為暴力搜尋會很花時間(10^81種可能),沒想到實際上由於各種限制,列舉次數竟然普遍小於10000次,用dfs便可實現每種可能都列舉。這樣計算乙個數獨就很快了(不到1ms),下面附上自己理解改動並加了注釋的**,dev編譯可能會效果好一些。
**:
#include #include#includechar map[9][9],xx;
int ans=0;
bool suit=false;
void position(int x,int y) ;
handle out=getstdhandle(std_output_handle);
setconsolecursorposition(out,pos);
}void hide()
void print(int x,int y)
bool check(int n,int v)
void dfs(int n)
if (map[x][y]!=0)
dfs(n+1);
else
for(int i=1;i<=9;i++)
if(check(n,i))
}int main()
if(i!=8||j!=8)
scanf("%c",&xx); //讀換行
}dfs(0); //求解
for(int i=0;i<9;i++)
printf("\n");
} system("pause");
}
巧用dfs解數獨問題 演算法筆記
巧妙的用 n 表示 第n 9行第n 9列 0是第乙個數 巧妙的用 row n 9 33 col n 9 33 表示數獨裡面的小正方形 行 列 那麼遍歷數獨就至於要乙個 n即可。0 n 81 因為數獨答案唯一,所以只要找到乙個正確的,就可以 exit 0 了。include include exit ...
java求解數獨(遞迴)
先來一些測試用例 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0...
用SQL求解數獨 Sudoku
看來用xslt解數獨已經沒有挑戰性了,因為xslt是披著xml外衣的函式程式語言。所以閒人中的閒人們用新時代的彙編 sql,來解決數獨問題。當然不是sql 92了,而是用了oracle10g裡介紹的model語句。這麼看來,鄒鍵老大用sql解簡單演算法題也不算離譜。d oracle的model語句允...