C 回溯法生成數獨

2021-07-10 10:16:41 字數 1275 閱讀 6465

演算法思路

首先第一行肯定是1~9的一種排列,直接使用shuffle進行隨機。

從第二行第乙個開始,嘗試填入數字,填入後依據數獨規則進行可行性判斷。如果可以填入該數字,則對下一格進行相同的判斷。如果某一格對於任何數字的填入都違反了數獨規則,則進行回溯,重新填上一格的數字。

當獲得乙個可行結果時,演算法終止。

c++**

**需要在支援c++11的環境下編譯。

#include 

#include

#include

#include

#include

using

namespace

std;

int main()

; //隨機生成一行1~9

auto init = (int* list)

);unsigned seed = chrono::system_clock::now().time_since_epoch().count();

shuffle(list, list + 9, default_random_engine(seed));

};init(scene[0]); //初始化第一行

int trylist[9];

init(trylist); //用於數字的嘗試順序

//判斷填入的數字是否合法

auto judge = [&scene](int i, int j, int num) -> bool

;//簡單回溯方法填入數字

function fill = [&trylist, &fill, &scene, judge](int y, int x, int* numloc) -> bool

scene[y][x] = 0;

if (numloc - trylist >= 8)

return

false;

if (fill(y, x, numloc + 1))

return

true;

};fill(1, 0, trylist);

//輸出

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

return

0;}

輸出結果

**通過visual studio 2015除錯

簡單的回溯法生成數獨遊戲

這是乙個課設的作業,對於理解回溯法很有用,所以把他碼住。好久沒敲這種 了,邊界居然調了半天,尷尬!作業描述 寫個數獨遊戲,具有自動生成數獨的功能和人工設定初始盤的功能,並且具有ui介面。作業分析 任務一 對於自動生成數獨的功能,他的功能實現邏輯是 回溯生成乙個數獨,然後隨機性讓部分區域可視 對於玩家...

回溯法解數獨

前天在我的小pad上裝了個數獨遊戲,完了幾把後興趣索然了。不過突然想起來一直想寫個解數獨的程式,不過因為懶和拖拉,就一直沒寫。今天花了30分鐘寫了個解數獨的程式,貼 include include include 某個數字填入後,需要檢查的index void get affected index ...

leetcode 解數獨 回溯法

如 方法 回溯法 回溯法的思想就是 對於乙個問題有多個選擇方式,先選擇乙個方式執行下去,若在執行過程中,發現不符合規則,則回退,回到選擇方式的步驟,進而選擇其他方式,繼續試。重要 對於回溯法,一定會有個 規則 這個 規則 將會決定是否回退,所以當我們在使用回溯法時,一定要留意能否構建 規則 如這一題...