NYOJ 題目772 數獨

2021-07-09 21:41:09 字數 1629 閱讀 7022

時間限制:

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 

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

思路:為了保證每一行,每一列,每一塊都不能重複,就用了三個vis陣列來判斷是否存在相同的數。沒遇到0時,嘗試輸入1~9,輸入之前先判斷該數是否在該行,該列,該塊存在,然後在往後搜,如果搜到後面不符合要求,返回之後清零。注意y=8之後要換行,以及走到最後的狀態(x=9,y=0)此時輸出。

#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,...