時間限制: 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的計算用了計算機中整數除法的自動捨去餘數
#includeusingnamespace
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 個數所在方格沒有公共邊,且取出的數的總和最大。試設計乙個滿足要求的取數演算法。程式設計任務 對於給定的方格...