問題 F 數獨遊戲

2021-10-03 16:53:03 字數 2034 閱讀 4277

題目描述

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

作為acmer的你,能寫乙個程式解決所有的數獨問題嗎?

世界上迄今難度最大的數獨遊戲:

輸入本題包含多組測試。每組測試會給你乙個 9*9 的矩陣,同一行相鄰的兩個元素用乙個空格分開。其中1-9代表該位置的已經填好的數,問號(?)表示需要你填的數。

輸出對於每組測試,請輸出它的解,同一行相鄰的兩個數用乙個空格分開。兩組解之間要乙個空行。 如果有多種答案,輸出任意一種即可!

樣例輸入 copy

? 2 6 7 ? ? 5 1 8

7 3 1 ? 5 8 6 2 4

5 4 ? 2 6 1 3 9 7

6 ? 4 3 7 ? ? 8 1

2 8 7 1 9 6 4 3 5

1 9 ? ? 8 4 7 6 2

3 7 ? 8 ? 9 1 4 6

8 ? 9 4 1 5 2 7 3

? 1 2 6 3 7 8 5 9

? 2 6 7 ? ? 5 1 8

7 3 1 ? 5 8 6 2 4

5 4 ? 2 6 1 3 9 7

6 ? 4 3 7 ? ? 8 1

2 8 7 1 9 6 4 3 5

1 9 ? ? 8 4 7 6 2

3 7 ? 8 ? 9 1 4 6

8 ? 9 4 1 5 2 7 3

? 1 2 6 3 7 8 5 9

樣例輸出 copy

9 2 6 7 4 3 5 1 8

7 3 1 9 5 8 6 2 4

5 4 8 2 6 1 3 9 7

6 5 4 3 7 2 9 8 1

2 8 7 1 9 6 4 3 5

1 9 3 5 8 4 7 6 2

3 7 5 8 2 9 1 4 6

8 6 9 4 1 5 2 7 3

4 1 2 6 3 7 8 5 9

9 2 6 7 4 3 5 1 8

7 3 1 9 5 8 6 2 4

5 4 8 2 6 1 3 9 7

6 5 4 3 7 2 9 8 1

2 8 7 1 9 6 4 3 5

1 9 3 5 8 4 7 6 2

3 7 5 8 2 9 1 4 6

8 6 9 4 1 5 2 7 3

4 1 2 6 3 7 8 5 9

數獨的規則是同一行同一列以及3 * 3矩陣內沒有1-9重複的數字

所以要分別檢查行列和3 * 3矩陣

因為會檢查到重複的數,所以回溯時可能刪除正確答案

可將搜尋改為bool型,判斷是否需要回溯

#include

using

namespace std;

char mp[10]

[10];

bool

check

(int x,

int y,

char k)

for(

int i=

0;i<

9;i++

)for

(int i=x/3*

3;i3+

3;i++)}

return

true;}

bool

dfs()}

}return

false;}

}}return

true;}

intmain()

cin>>mp[i]

[j];}}

dfs();

for(

int i=

0;i<

9;i++)if

(i==8)

cout<

return0;

}

leetcode 數獨遊戲

第乙個問題 用程式實現數獨的出題,而不是答題。換句話說就是驗證給定的乙個數獨中的九宮格,該九宮格是否滿足數獨遊戲的規則。數獨遊戲的規則是什麼 每一行沒有重複。每一列沒有重複。每乙個3x3的小格中沒有重複。方法一 一次迭代法 class solution validate a board for in...

數獨遊戲解密

includeusing namespace std struct board board myboard int grid 9 9 void initgrid board board int pregrid board board bool maybe board board,int i,int ...

C 數獨遊戲(一) 構造數獨矩陣

其實一直都很想寫個數獨的遊戲,最近剛好看了 程式設計之美 得到了一些啟發。好,這時第一節,構造數獨矩陣。主要用到深度搜尋演算法,先往下乙個格仔填數字 依次填入1 9 在9 9 的行中檢驗數字有沒有出現過,在9 9 的列中檢驗數字有沒有出現過,最後在3 3的 中檢驗數字是否出現過。如果最後1 9中所有...