HDU 1426 Sudoku Killer【DFS 数独】
生活随笔
收集整理的這篇文章主要介紹了
HDU 1426 Sudoku Killer【DFS 数独】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
自從2006年3月10日至11日的首屆數獨世界錦標賽以后,數獨這項游戲越來越受到人們的喜愛和重視。?據說,在2008北京奧運會上,會將數獨列為一個單獨的項目進行比賽,冠軍將有可能獲得的一份巨大的獎品———HDU免費七日游外加lcy親筆簽名以及同hdu acm team合影留念的機會。?
所以全球人民前仆后繼,為了獎品日夜訓練茶飯不思。當然也包括初學者linle,不過他太笨了又沒有多少耐性,只能做做最最基本的數獨題,不過他還是想得到那些獎品,你能幫幫他嗎?你只要把答案告訴他就可以,不用教他是怎么做的。?
數獨游戲的規則是這樣的:在一個9x9的方格中,你需要把數字1-9填寫到空格當中,并且使方格的每一行和每一列中都包含1-9這九個數字。同時還要保證,空格中用粗線劃分成9個3x3的方格也同時包含1-9這九個數字。比如有這樣一個題,大家可以仔細觀察一下,在這里面每行、每列,以及每個3x3的方格都包含1-9這九個數字。?
例題:?
?
答案:?
? Input本題包含多組測試,每組之間由一個空行隔開。每組測試會給你一個 9*9 的矩陣,同一行相鄰的兩個元素用一個空格分開。其中1-9代表該位置的已經填好的數,問號(?)表示需要你填的數。?
Output對于每組測試,請輸出它的解,同一行相鄰的兩個數用一個空格分開。兩組解之間要一個空行。
對于每組測試數據保證它有且只有一個解。?
Sample Input 7 1 2 ? 6 ? 3 5 8 ? 6 5 2 ? 7 1 ? 4 ? ? 8 5 1 3 6 7 2 9 2 4 ? 5 6 ? 3 7 5 ? 6 ? ? ? 2 4 1 1 ? 3 7 2 ? 9 ? 5 ? ? 1 9 7 5 4 8 6 6 ? 7 8 3 ? 5 1 9 8 5 9 ? 4 ? ? 2 3 Sample Output 7 1 2 4 6 9 3 5 8 3 6 5 2 8 7 1 9 4 4 9 8 5 1 3 6 7 2 9 2 4 1 5 6 8 3 7 5 7 6 3 9 8 2 4 1 1 8 3 7 2 4 9 6 5 2 3 1 9 7 5 4 8 6 6 4 7 8 3 2 5 1 9 8 5 9 6 4 1 7 2 3 #include<stdio.h> #include<string.h> #include<iostream> using namespace std;struct Node {int x,y; }node[100];int map[10][10]; bool flag; int num; bool check(int k,int t) {for(int i=0;i<9;i++)if(map[node[t].x][i]==k||map[i][node[t].y]==k) return false;int x=(node[t].x/3)*3;int y=(node[t].y/3)*3;for(int i=x;i<x+3;i++)for(int j=y;j<y+3;j++)if(map[i][j]==k) return false;return true; } void DFS(int t) {if(t==num){for(int i=0;i<9;i++){for(int j=0;j<8;j++)printf("%d ",map[i][j]);printf("%d\n",map[i][8]);} flag=1;return; } else{for(int i=1;i<=9;i++){if(check(i,t)&&!flag){map[node[t].x][node[t].y]=i;DFS(t+1);map[node[t].x][node[t].y]=0;} } } } int main() {bool first=true;char str[10];while(scanf("%s",&str)!=EOF){num=0;if(str[0]=='?'){node[num].x=0;node[num++].y=0;map[0][0]=0;} else map[0][0]=str[0]-'0';for(int i=0;i<9;i++)for(int j=0;j<9;j++){if(i==0&&j==0)continue;scanf("%s",&str);if(str[0]=='?'){node[num].x=i;node[num++].y=j;map[i][j]=0;} else map[i][j]=str[0]-'0';} flag=false;if(first) first=false;else printf("\n");DFS(0); } return 0; } View Code
?
POJ2676-Sudoku?
http://blog.csdn.net/lyy289065406/article/details/6647977
http://www.cnblogs.com/PJQOOO/p/4074644.html
http://blog.csdn.net/huanhuanxiaoxiao/article/details/77375877
轉載于:https://www.cnblogs.com/Roni-i/p/7436587.html
總結
以上是生活随笔為你收集整理的HDU 1426 Sudoku Killer【DFS 数独】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VS 替换 行
- 下一篇: Effective C++ 条款05