回溯演算法的趣例

2021-10-23 06:06:26 字數 1325 閱讀 8048

《回溯演算法的趣例》

dfs是深度優先搜尋演算法,通過這種方式能夠很輕鬆的解決四色問題。ps:這個題是當時年少無知的時候寫的,我甚至不確定當時自己知不知道什麼是dfs,哈哈,也不知道為什麼會整理這樣一道題,現在看來這個題感覺還挺有意思的,就是典型的回溯演算法,和解決八皇后的問題如出一轍。比較有技巧的地方是,我們需要根據給定的圖例勾畫乙個矩陣。

key words:四色問題、dfs

beijing, 2020

agile pioneer  

description:

每個區域代表乙個省,區域中的數字代表省的編號,今將每個省塗上紅(r),藍(b),黃(y),綠(w)四種顏色之一,使相鄰的省份不同顏色,如果區域1只 塗紅色,那麼總共有多少不同的塗法?

首先用乙個矩陣來表示區域的相鄰情況,矩陣的每一行表示乙個地區和所有地區的相鄰情況,如果兩個地區相鄰,那麼為1,反之為0。對於上圖而言,相鄰矩陣為:

1  2  3  4  5  6  7

1 ,

2 ,3 ,

4 ,5 ,

6 ,7

};

求解思路為:第乙個地區的顏色是固定的,所以第二個地區開始遍歷顏色,如果和第乙個地區相鄰的顏色相同,則換下乙個顏色,如果不同,那麼第三個地區開始遍歷顏色,進行深度的遞迴。

對所有的地區都遍歷所有的顏色,並保留滿足需求的配色方案,返回。

#include

using namespace std;

int n =7;

int regions[7]

;// 初始化地區

int total =0;

// 初始化地區間的關係 1表示相鄰,0表示不相鄰

int connection[7]

[7]=

,,,,

,,};

// 剪枝 判斷當前的顏色是否與相鄰的衝突

bool is_different_color_with_neighbor

(int depth,

int color)}}

return true;

}void

backtrack

(int depth)

for(

int color =

1; color <=

4; color++)}

intmain()

回溯 leetcode回溯演算法

回溯演算法實際上乙個類似列舉的搜尋嘗試過程,主要是在搜尋嘗試過程中尋找問題的解,當發現已不滿足求解條件時,就 回溯 返回,嘗試別的路徑。回溯法是一種選優搜尋法,按選優條件向前搜尋,以達到目標。但當探索到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法,...

演算法 回溯演算法

回溯演算法也叫試探法,它是一種系統地搜尋問題的解的方法。回溯演算法的基本思想是 從一條路往前走,能進則進,不能進則退回來,換一條路再試 1 有許多問題,當需要找出它的解集或者要求回答什麼解是滿足某些約束條件的最佳解時,往往要使用回溯法 2 回溯法的基本做法是搜尋,或是一種組織得井井有條的,能避免不必...

演算法趣題(二)

問題 有一組寫著數字 1 11 100 10010 0 的紙牌,按照從小到大的順序排列著。最開始所有的紙牌都背面朝上。接下來按照規則翻牌 第一次從第 2 22 張紙牌開始,隔一張牌翻牌,於是第 2 4 6 8 100 2 4 6 8 100 2 4 6 8 10 0 位置的牌會變成正面朝上 第二次從...