時間限制:
1000 ms | 記憶體限制:
65535 kb
難度:4 描述
數獨是一種運用紙、筆進行演算的邏輯遊戲。玩家需要根據9×9盤面上的已知數字,推理出所有剩餘空格的數字,並滿足每一行、每一列、每乙個3*3宮內的數字均含1-9,不重複。 每一道合格的數獨謎題都有且僅有唯一答案,推理方法也以此為基礎,任何無解或多解的題目都是不合格的。
有一天hrdv碰到了一道號稱是世界上最難的數獨的題目,作為一名合格的程式設計師,哪能隨隨便便向困難低頭,於是他決定編個程式來解決它。。
輸入
第一行有乙個數n(0< n <100),表示有n組測試資料,每組測試資料是由乙個9*9的九宮格構成,0表示對應的格仔為空
輸出輸出乙個9*9的九宮格,為這個數獨的答案
樣例輸入
1樣例輸出0 0 5 3 0 0 0 0 0
8 0 0 0 0 0 0 2 0
0 7 0 0 1 0 5 0 0
4 0 0 0 0 5 3 0 0
0 1 0 0 7 0 0 0 6
0 0 3 2 0 0 0 8 0
0 6 0 5 0 0 0 0 9
0 0 4 0 0 0 0 3 0
0 0 0 0 0 9 7 0 0
1 4 5 3 2 7 6 9 8思路:為了保證每一行,每一列,每一塊都不能重複,就用了三個vis陣列來判斷是否存在相同的數。沒遇到0時,嘗試輸入1~9,輸入之前先判斷該數是否在該行,該列,該塊存在,然後在往後搜,如果搜到後面不符合要求,返回之後清零。注意y=8之後要換行,以及走到最後的狀態(x=9,y=0)此時輸出。8 3 9 6 5 4 1 2 7
6 7 2 9 1 8 5 4 3
4 9 6 1 8 5 3 7 2
2 1 8 4 7 3 9 5 6
7 5 3 2 9 6 4 8 1
3 6 7 5 4 2 8 1 9
9 8 4 7 6 1 2 3 5
5 2 1 8 3 9 7 6 4
#include#include#includeusing namespace std;
int flag=0;
int map[9][9];
bool visrow[9][10],viscol[9][10],visspa[9][10];//分別為行,列,塊
int spa(int i,int j)
int check(int num,int x,int y)
void dfs(int x,int y)
else printf(" %d",map[i][j]);
}first=1;
printf("\n");
} flag=1;
} if(y==9)dfs(x+1,0);//到了一行的最末尾
if(map[x][y]!=0)dfs(x,y+1);//遇到不為0的數,直接跳到下乙個
if(map[x][y]==0)
} }}int main()
}dfs(0,0);
flag=0;
}return 0;
}
數獨超難題目 超難數獨基本解題法
該樓層疑似違規已被系統摺疊 隱藏此樓檢視此樓 數獨遊戲難題案例 1.1 2 3 4 5 6 7 8 9 a 5 7 b 2 8 c 3 9 5 d 6 5 7 e 9 3 4 f 7 8 2 g 4 5 1 h 6 7 i 1 3 1.1 1 2 3 4 5 6 7 8 9 a 5 7 8 b 2 ...
數獨超難題目 世界最難數獨遊戲 世界上最難數獨題目
芬蘭數學家因卡拉,去年花費3個月時間設計出了世界上迄今難度最大 約為11級 的數獨遊戲,號稱只有世上最聰明的頭腦才可能得到答案。而這個 世上最難數獨 日前卻被我市灣頭鎮一位69歲的農民 龍,用3天時間解出。昨日,有外地 數友 對 龍的結果提出疑問,龍的女兒特委託本報幫忙一起尋找更多本地 數友 共同參...
NYOJ 題目58 最小步數
時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 這有乙個迷宮,有0 8行和0 8列 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 1,0,0,1,1,0,0,0,1 1,0,1,0,1,1,0,1,1 1,0,0,0,0,1,0,0,1 1,1,0,...