對回溯演算法的理解(以數獨遊戲為例,使用c 實現)

2022-02-11 13:18:15 字數 2004 閱讀 2743

演算法思想:

數獨遊戲的規則:

每一行都用到1、2、3、4、5、6、7、8、9位置不限;

每一列都用到1、2、3、4、5、6、7、8、9位置不限;

每3×3的格仔(共九個這樣的格仔)都用到1、2、3、4、5、6、7、8、9位置不限。

遊戲的過程就是用1、2、3、4、5、6、7、8、9填充空白,並要求滿足每行、每列、每個九宮格都用到1、2、3、4、5、6、7、8、9。

實現方法:

由於數獨都是9*9的,所以解空間有81層,每層有9個分支,我們做的就是遍歷這個解空間。求得到所有解的話,可以在解出現的時候存下來:

1 #include "

stdafx.h

"2 #include3 #include"

stdlib.h

"4 #include5 #include6 #include7 #include8

using

namespace

std;

9 vectorchar> > >sum;

10bool check(vectorchar> > &board,int

k)11

19for (int j = 0; j < 9; j++)

2024

for (int i = 3 * (x / 3); i < 3 * (x / 3 + 1); i++)

25for (int j = 3 * (y/3); j < 3 * (y / 3 + 1); j++)

26if (i != x&&j != y&&board[i][j] ==board[x][y])

27return

false;28

return

true;29

}30void dfs(int num, vectorchar> >&board)

3137

else

4950

}51 board[x][y] = '.'

;//如果沒有滿足條件的數值,則恢復原來點值,向上回溯,改變父節點的值,重新往下計算,直到根節點第乙個位置的值遍歷到9為止。52}

數獨遊戲(sudoku)演算法 回溯 剪枝

具體數獨遊戲是什麼,我就不介紹了,好像多餘了,你能來看這篇文章,說明你對數獨遊戲已經有了相當的了解了!還是入正題吧,今天先講解和發下用回溯 剪枝 求數獨遊戲,我也看了些回溯 剪枝求數獨的演算法,很惱火,既沒注釋,而且演算法沒有通用性。今天我給大家講的回溯 剪枝法,不僅可以用於解決數獨問題,而且還可以...

回溯法的應用之 數獨遊戲

數獨我就不多說話了 沒玩過的可以自己玩玩,或者百科下 關鍵是回溯法。這次是巧妙的利用八皇后的基礎搞出來的 下面我就來好好講將回溯法。上面的話一大推,你會發現很多廢話,其實回溯就是倒著來,返回。我們來回顧下本演算法的回溯演算法 1 include 2 3using namespace std 45 d...

深入淺出理解死鎖(以吃雞遊戲為例)

銀行家演算法 死鎖 英語 deadlock 電腦科學名詞。當兩個以上的運算單元,雙方都在等待對方停止執行,以獲取系統資源,但是沒有一方提前退出時,就稱為死鎖。舉乙個簡單的例子就很容易理解什麼是死鎖了。我和女朋友一起玩絕地求生,我撿到了一把98k,女朋友撿到了乙個八倍鏡。我手裡有98k,想要女朋友包裡...