DFS(深度優先搜尋)
DFS(深度優先搜尋):
深度優先搜尋演算法(英語:Depth-First-Search,簡稱DFS)是一種用於遍歷或搜尋樹或圖的演算法。 沿著樹的深度遍歷樹的節點,儘可能深的搜尋樹的分支。當節點v的所在邊都己被探尋過或者在搜尋時結點不滿足條件,搜尋將回溯到發現節點v的那條邊的起始節點。整個程式反覆進行直到所有節點都被訪問為止。屬於盲目搜尋,最糟糕的情況演算法時間複雜度為O(!n)。(一條路走到黑,直到走不下去才往回走)
基本模板:
int check(引數)
{
if(滿足條件)
return 1;
return 0;
}
void dfs(int step)
{
判斷邊界
{
相應操作
}
嘗試每一種可能
{
滿足check條件
標記
繼續下一步dfs(step+1)
恢復初始狀態(回溯的時候要用到)
}
}
1、例題:
馬虎的算式:
小明是個急性子,上小學的時候經常把老師寫在黑板上的題目抄錯了。
有一次,老師出的題目是:36 x 495 = ?
他卻給抄成了:396 x 45 = ?
但結果卻很戲劇性,他的答案竟然是對的!!
因為 36 * 495 = 396 * 45 = 17820
類似這樣的巧合情況可能還有很多,比如:27 * 594 = 297 * 54
假設 a b c d e 代表1~9不同的5個數字(注意是各不相同的數字,且不含0)
能滿足形如: ab * cde = adb * ce 這樣的算式一共有多少種呢?
請你利用計算機的優勢尋找所有的可能,並回答不同算式的種類數。
滿足乘法交換律的算式計為不同的種類,所以答案肯定是個偶數。
答案直接通過瀏覽器提交。
注意:只提交一個表示最終統計種類數的數字,不要提交解答過程或其它多餘的內容。
2、程式碼:(DFS)
#include <iostream>
#include <algorithm>
using namespace std;
int vis[10];
int a[5];
int cnt;
bool judge(){
int t1=(a[0]*10+a[1])*(a[2]*100+a[3]*10+a[4]);
int t2=(a[0]*100+a[3]*10+a[1])*(a[2]*10+a[4]);
if(t1==t2) return true;
return false;
}
void dfs(int pos){
if(pos==5){
if(judge()) cnt++;
return;
}
for(int i=1;i<=9;i++){//注意搜尋範圍是1~9
if(vis[i]==0){
a[pos]=i;
vis[i]=1;
dfs(pos+1);
vis[i]=0;
}
}
}
int main() {
dfs(0);
cout<<cnt;
return 0;
}
3、結果:
來源:https://blog.csdn.net/qq_39825375/article/details/86617438
相關文章
- 【演算法】深度優先搜尋(DFS)演算法
- 基本演算法——深度優先搜尋(DFS)和廣度優先搜尋(BFS)演算法
- 深度優先搜尋演算法(DFS)講解演算法
- 深度優先搜尋演算法-dfs講解演算法
- 深度優先搜尋 (Depth First Search 簡稱:DFS)
- 深度優先搜尋(DFS)思路及演算法分析演算法
- LeetCode演算法練習——深度優先搜尋 DFSLeetCode演算法
- 深度優先搜尋
- 學習資料結構 - 深度優先搜尋 DFS 記錄資料結構
- ybtoj:深度優先搜尋
- dfs深度優先搜尋解決迷宮類問題(遍歷)
- 圖的遍歷:深度優先搜尋與廣度優先搜尋
- 圖的廣度優先搜尋和深度優先搜尋Python實現Python
- python 二叉樹深度優先搜尋和廣度優先搜尋Python二叉樹
- 遞迴——深度優先搜尋(DFS)——以滑雪問題為例(自頂而下)遞迴
- leetcode 刷題之深度優先搜尋LeetCode
- 【知識點】深度優先搜尋 Depth First Search
- 深度和廣度優先搜尋演算法演算法
- 啟發式搜尋的方式(深度優先,廣度優先)和 搜尋方法(Dijkstra‘s演算法,代價一致搜尋,貪心搜尋 ,A星搜尋)演算法
- 從1到n的全排列(深度優先搜尋)
- 0基礎學演算法 搜尋篇第一講 深度優先搜尋演算法
- ybtoj:廣度優先搜尋
- bfs廣度優先搜尋
- 再來一篇深度優先遍歷/搜尋總結?
- c++ 廣度優先搜尋(寬搜)C++
- 小白的深度優先搜尋(Depth First Search)學習日記(Python)Python
- 深度DFS 和 廣度BFS搜尋演算法學習演算法
- 二分搜尋樹系列之[ 深度優先-層序遍歷 (ergodic) ]Go
- 二分搜尋樹系列之「深度優先-層序遍歷 (ergodic) 」Go
- 寫不出來的深度優先搜尋----leetcode113 路徑總和LeetCode
- js版本的(廣、深)度優先搜尋JS
- 【程式碼隨想錄】廣度優先搜尋
- 演算法筆記(廣度優先搜尋)演算法筆記
- POJ1915,雙向寬度優先搜尋
- 演算法競賽——BFS廣度優先搜尋演算法
- 【演算法】廣度/寬度優先搜尋(BFS)演算法
- 834. 樹中距離之和-困難-樹、圖、動態規劃、深度優先搜尋動態規劃
- 十、深度優先 && 廣度優先