深度優先搜尋 簡單demo

2021-08-24 20:28:09 字數 866 閱讀 1480

輸入乙個數n,輸出 1 ~ n 的全排列,例如輸入 3,全排列則為:123,132,213,231,312,321 一共六種。

這裡採用深度優先搜尋來解決這個問題:

#includeint n;

int a[10],book[10];

//遞迴核心**

void dfs(int step)

printf("\n");

return; //返回上一步

}else

}return;

}}int main()

理解深度優先搜尋的關鍵在於解決「當下該如何做」。至於「下一步如何做」,則與「當下該如何做」事一樣的。下面**就是深度優先搜尋的基本模型。

void dfs(int step)

}

**解讀:

當我們輸入12,**執行,一路執行,放入數字

一路到1,2,3,4,5,6,7,8,9,10,11,12,這時候在下一節點碰到 step == n+1,

已經沒有下一節點了,直接輸出全排列,1,2,3,4,5,6,7,8,9,10,11,12,同時進行返回,返回到第12步,

第12步執行****:book[i] = 0 ,將12**,繼續退回到11步,

在第11步,先**了11,在for迴圈中,繼續前進,到達第12次for迴圈,因此放入12,繼續深度下一節點

此時,只剩下11,放入,繼續下一節點,碰到 step == n+1 

已經沒有下一節點了,直接輸出全排列,1,2,3,4,5,6,7,8,9,10,12,11,同時進行返回,返回到第12步,

在第12步****。。。。。。。

以此類推,直至全部搜尋完畢

廣度優先搜尋 深度優先搜尋

前言 這幾天複習圖論演算法,覺得bfs和dfs挺重要的,而且應用比較多,故記錄一下。廣度優先搜尋 有乙個有向圖如圖a 圖a廣度優先搜尋的策略是 從起始點開始遍歷其鄰接的節點,由此向外不斷擴散。1.假設我們以頂點0為原點進行搜尋,首先確定鄰接0的頂點集合s0 2.然後確定頂點1的集合s1 頂點2沒有鄰...

廣度優先搜尋,深度優先搜尋

深度優先搜尋 depth first search 簡稱dfs。最直觀的例子就是 走迷宮 廣度優先搜尋 每個頂點都要進出一遍佇列,每個邊也都會被訪問一次,所以 時間複雜度o v e 主要消耗記憶體的是visited prev陣列 queue佇列,所以 空間複雜度o v 深度優先搜尋 每條邊最多會被訪...

深度優先搜尋 廣度優先搜尋

深度優先搜尋 廣度優先搜尋 通過鄰接矩陣對圖進行深搜和廣搜 package com.neusoft.data.structure 深度優先搜尋 廣度優先搜尋 通過鄰接矩陣對圖進行深搜和廣搜 public class dfsbfs 初始化 邊 mmatrix new int vlen vlen for...