深度優先搜尋演算法(depth first search,簡稱dfs):一種用於遍歷或搜尋樹或圖的演算法。 沿著樹的深度遍歷樹的節點,盡可能深的搜尋樹的分支。當節點v的所在邊都己被探尋過或者在搜尋時結點不滿足條件,搜尋將回溯到發現節點v的那條邊的起始節點。整個程序反覆進行直到所有節點都被訪問為止。屬於盲目搜尋,最糟糕的情況演算法時間複雜度為o(!n)。
回溯法(探索與回溯法)是一種選優搜尋法,又稱為試探法,按選優條件向前搜尋,以達到目標。但當探索到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法,而滿足回溯條件的某個狀態的點稱為「回溯點」。
int check(引數)
void dfs(int step)
嘗試每一種可能
}
1、全排列問題
//全排列問題
#include#includeint n;
char a[15];
char re[15];
int vis[15];
//假設有n個字元要排列,把他們依次放到n個箱子中
//先要檢查箱子是否為空,手中還有什麼字元,把他們放進並標記。
//放完一次要恢復初始狀態,當到n+1個箱子時,一次排列已經結束
void dfs(int step)
for(i=1;i<=n;i++)//遍歷每一種情況
}return ;}
int main(void)
return 0;
}
2、乙個環由個圈組成,把自然數1,2,…,n分別放在每乙個圓內,數字的在兩個相鄰圈之和應該是乙個素數。 注意:第一圈數應始終為1。
input: n(0~20)
output:輸出格式如下所示的樣品。每一行表示在環中的一系列圓號碼從1開始順時針和按逆時針方向。編號的順序必須滿足上述要求。列印解決方案的字典順序。
//prime ring problem
//與上面的全排列問題其實思路差不多,只是需要判斷的條件比較多
//化大為小
#include#include#includeint book[25];
int result[25];
int n;
int num;
//判斷是否為素數
int prime(int n)
if(i*i>n)
return 1;
return 0;
}//判斷是否能將當前的數字放到當前的圈內
int check(int i,int step)
return 1;
}return 0;}
void dfs(int step)
,,,,,,,};//表示8個方向
int check(int x,int y)//檢查是否有油田
for(int i=r; i
}} int main(void)
dfs(0, k);//從第0行開始放,此時手中還剩k個棋子
printf("%d\n", ans);
}return 0;
}
深度優先搜尋演算法(DFS)
1.深度優先搜尋屬於圖的遍歷演算法的一種,英文縮寫為dfs即depth first search.其過程簡要來說是對每乙個可能的分支路徑深入到不能再深入為止,而且每個節點只能訪問一次。2.搜尋策略 深度優先遍歷圖的方法是,從圖中某頂點v出發 1 訪問頂點v 2 依次從v的未被訪問的鄰接點出發,對圖進...
DFS深度優先搜尋演算法
例題一 題目大意 約翰的農場被暴風雨給淹沒了,損失很大,他的保險公司將支付給他,但是支付金額取決於被淹沒的最大面積。這個農場是乙個邊長分別為n m的矩形,包含nm個空間,每個空間要麼是幹的,要麼是被淹沒的,一共有k個空間被淹沒。求最大的淹沒面積。ac include include include ...
DFS 深度優先搜尋演算法
深度優先搜尋演算法 depth first search,簡稱dfs 一種用於遍歷或搜尋樹或圖的演算法。沿著樹的深度遍歷樹的節點,盡可能深的搜尋樹的分支。當節點v的所在邊都己被探尋過或者在搜尋時結點不滿足條件,搜尋將回溯到發現節點v的那條邊的起始節點。整個程序反覆進行直到所有節點都被訪問為止。屬於盲...