數獨遊戲的深度優先遍歷解法

2021-06-28 18:40:18 字數 1164 閱讀 3735

數獨簡介:

數獨 是一種邏輯性的數字填充遊戲,玩家須以數字填進每一格,而每行、每列和每個宮(即3x3的大格)有齊1至9所有數字。遊戲設計者會提供一部份的數字,使謎題只有乙個答案。乙個已解答的數獨其實是一種多了宮的限制的拉丁方陣,因為同乙個數字不可能在同一行、列或宮中出現多於一次。

深度優先遍歷演算法:

學過資料結構的同學都知道,深度遍歷演算法最開始是為解決樹的遍歷發展出來的,而後用於圖的遍歷。就像走迷宮似的,走到乙個點之後發現不能滿足當前條件,於是必須得退回到前乙個狀態繼續探索迷宮。主要思想過程我就不用再說了,本科期間大家已經很熟了。

演算法過程分析:

先假設已經生成了乙個數獨謎題,例如上題中的數獨謎題,先填第一行第二列中的空格,首先遍歷橫排,再遍歷豎排,最後遍歷方格。如此迴圈,如果碰到數字相同的情況,則需要換另外乙個數字,如果1到9的全部數字情況都不滿足的情況下,則需要返回到前乙個狀態,如果前乙個狀態還不滿足,則繼續返回知道滿足在繼續遍歷。

演算法**:

#include 

using

namespace

std;

char

map[10][10];

struct

cor[90];

int count;

bool fit(char number,int x,int y)//判斷是否符合填入條件

void search(int x)

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

}}int main()

}search(0);//開始遍歷

cout

0;}

測試事例:謎題就用上圖出現過的數字

測試後:

測試成功!!!!

數獨遊戲的AI解法

因為解的過程沒有全域性狀態這種概念,所以不方便使用著名的h d模板來解。其實因為格仔的數量很少,只要做簡章的優化就完全不存在問題。即使用窮舉法,也能很快算出答案。某人 不要小看窮舉法!下次準備考慮生成遊戲的演算法,難度應該較高。console工程的 sudoku.cpp 定義控制台應用程式的入口點。...

數獨遊戲的解法到App的實現

在leetcode上偶然刷到乙個解數獨的題目 編寫乙個程式,通過已填充的空格來解決數獨問題。乙個數獨的解法需遵循如下規則 note 這個題目很是有趣,解決了數獨算不出來的難題。首先想到的是暴力列舉了,也就是對每個空格進行列舉,回溯法。public void solvesudoku char boar...

尋找島嶼數 深度優先遍歷 廣度優先遍歷 並查集

給你乙個由 1 陸地 和 0 水 組成的的二維網格,請你計算網格中島嶼的數量。島嶼總是被水包圍,並且每座島嶼只能由水平方向和 或豎直方向上相鄰的陸地連線形成。此外,你可以假設該網格的四條邊均被水包圍。示例 1 輸入 11110 11010 11000 00000 輸出 1 示例 2 輸入 11000...