演算法思路
首先第一行肯定是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;}
輸出結果![](https://pic.w3help.cc/f26/45fd00634ec3d66c6a4a0ffe6d9bc.jpeg)
**通過visual studio 2015除錯
簡單的回溯法生成數獨遊戲
這是乙個課設的作業,對於理解回溯法很有用,所以把他碼住。好久沒敲這種 了,邊界居然調了半天,尷尬!作業描述 寫個數獨遊戲,具有自動生成數獨的功能和人工設定初始盤的功能,並且具有ui介面。作業分析 任務一 對於自動生成數獨的功能,他的功能實現邏輯是 回溯生成乙個數獨,然後隨機性讓部分區域可視 對於玩家...
回溯法解數獨
前天在我的小pad上裝了個數獨遊戲,完了幾把後興趣索然了。不過突然想起來一直想寫個解數獨的程式,不過因為懶和拖拉,就一直沒寫。今天花了30分鐘寫了個解數獨的程式,貼 include include include 某個數字填入後,需要檢查的index void get affected index ...
leetcode 解數獨 回溯法
如 方法 回溯法 回溯法的思想就是 對於乙個問題有多個選擇方式,先選擇乙個方式執行下去,若在執行過程中,發現不符合規則,則回退,回到選擇方式的步驟,進而選擇其他方式,繼續試。重要 對於回溯法,一定會有個 規則 這個 規則 將會決定是否回退,所以當我們在使用回溯法時,一定要留意能否構建 規則 如這一題...