題目描述
芬蘭數學家因卡拉,花費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中所有...