深度優先搜尋的幾點認識

2021-08-22 07:15:21 字數 847 閱讀 2402

學了一星期數學,不想多說。看一下其他演算法,放鬆一下心情。

首先看深度優先搜尋:

找到一張圖:

深度優先的主要思想就是「不撞南牆不回頭」,「一條路走到黑」,如果遇到「牆」或者「無路可走」時再去走下一條路。

從v0->v6

按照深搜思想v0->v1(也可以是v0->v3或v0->v2)->v4,這時找不到v6,返回,接著從v1->v3(v0已遍歷)->v5->v6(找到則退出)或者v1->v2->v6(找到退出)。

其他節點的遍歷在這裡就不寫出,同上。

可以看出:深搜多數時候難以尋找最優解,僅僅只能尋找有解。其優點就是記憶體消耗小。

但是在判斷是否有解的情況下,深搜大多數時候比較快。

一道例題:

1-20這20個數擺成乙個環,要求相鄰兩個數的和是素數:

#include

using namespace std;

#define ll long long

int a[21]= ;

bool mark[22]= ;

int total=0;

bool prime(int a,int b)

void print()

else

mark[i]=0;//恢復 :儲存結果之前的狀態、回溯一步

}if(total==20)return;//只讓他輸出19組結果;}}

int main()

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

前言 這幾天複習圖論演算法,覺得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...