codevs2924 數獨挑戰

2022-04-02 18:53:59 字數 2232 閱讀 5464

時間限制: 1 s

空間限制: 1000 kb

題目等級 : 鑽石 diamond

題解題目描述description

「芬蘭數學家因卡拉,花費3個月時間設計出了世界上迄今難度最大的數獨遊戲,而且它只有乙個答案。因卡拉說只有思考能力最快、頭腦最聰明的人才能破解這個遊戲。」這是英國《每日郵報》2023年6月30日的一篇報道。這個號稱「世界最難數獨」的「超級遊戲」,卻被揚州一位69歲的農民花三天時間解了出來。

看到這個新聞後,我激動不已,證明我們oi的實力的機會來了,我們雖然不是思考能力最快、頭腦最聰明的人,但是我們可以保證在1s之內解題。

好了廢話不多說了……

數獨是一種填數字遊戲,英文名叫sudoku,起源於瑞士,上世紀70年代由美國一家數學邏輯遊戲雜誌首先發表,名為number place,後在日本流行,2023年將sudoku命名為數獨,即「獨立的數字」的省略,解釋為每個方格都填上乙個個位數。2023年,曾任中國香港高等法院法官的高樂德(wayne gould)把這款遊戲帶到英國,成為英國流行的數學智力拼圖遊戲。

玩家需要根據9×9盤面上的已知數字,推理出所有剩餘位置(資料表示為數字0)的數字,並滿足每一行、每一列、每乙個粗線宮內的數字均含1-9,不重複。

現在給你乙個數獨,請你解答出來。每個數獨保證有解且只有乙個。

輸入描述input description

9行9列。

每個數字用空格隔開。0代表要填的數

行末沒有空格,末尾沒有回車。

輸出描述output description

輸出答案。

排成9行9列。

行末沒有空格,結尾可以有回車。

樣例輸入sample input

2 0 0 0 1 0 8 9 0

0 0 7 0 0 0 0 0 0

0 0 0 9 0 0 0 0 7

0 6 0 0 0 1 3 0 0

0 9 0 7 3 4 0 8 0

0 0 3 6 0 0 0 5 0

6 0 0 0 0 2 0 0 0

0 0 0 0 0 0 1 0 0

0 5 9 0 8 0 0 0 3

樣例輸出sample output

2 4 5 3 1 7 8 9 6

9 1 7 2 6 8 5 3 4

3 8 6 9 4 5 2 1 7

4 6 2 8 5 1 3 7 9

5 9 1 7 3 4 6 8 2

8 7 3 6 2 9 4 5 1

6 3 8 1 7 2 9 4 5

7 2 4 5 9 3 1 6 8

1 5 9 4 8 6 7 2 3

框架就是列舉每個格點,然後對於列舉到的點進行1~9的討論

這個題重點和難點就在於判重,我用三個陣列

x_use[i][num]判斷第i行數字為num的數是否用過

y_use[j][num] 判斷第j列數字為num的數是否用過

xy_use[i][j][num]判斷左上角的座標為(i,j)的3*3方格中數字為num的數是否用過,i,j的計算用了計算機中整數除法的自動捨去餘數

#includeusing

namespace

std;

int map[10][10],mp[10][10

];bool x_use[10][10],y_use[10][10

];bool xy_use[10][10][10

];int

cnt;

struct

nodee[

100];

bool

flag;

void dfs(int

num)

int x=e[num].x;

int y=e[num].y;

for(int i=1;i<=9;i++)

}}int

main()

else}}

dfs(1);

for(int i=0;i<9;i++)

cout

<}

}

codevs 2924 數獨挑戰

時間限制 1 s 空間限制 1000 kb 題目等級 鑽石 diamond 芬蘭數學家因卡拉,花費3個月時間設計出了世界上迄今難度最大的數獨遊戲,而且它只有乙個答案。因卡拉說只有思考能力最快 頭腦最聰明的人才能破解這個遊戲。這是英國 每日郵報 2012年6月30日的一篇報道。這個號稱 世界最難數獨 ...

牛客 數獨挑戰 dfs

題目鏈結 1 暴力法 tle include using namespace std const int inf 0x3f3f3f3f typedef long long ll int e 10 10 int r 10 10 記錄該行 1 9是否出現 出現為 1 int c 10 10 int k ...

code vs 方格取數3

時間限制 2 s 空間限制 256000 kb 題目等級 大師 master 題解 檢視執行結果 問題描述 在乙個有m n 個方格的棋盤中,每個方格中有乙個正整數。現要從方格中取數,使任 意2 個數所在方格沒有公共邊,且取出的數的總和最大。試設計乙個滿足要求的取數演算法。程式設計任務 對於給定的方格...