深度優先搜尋

2021-08-24 17:51:44 字數 2148 閱讀 7684

目錄

dfs演算法:

在圖上尋找路徑1.判斷從v出發是否能到終點 

2.判斷從v出發是否能到終點,如果能,記錄路徑

3.在圖上尋找最優(步數最少)路徑

4.遍歷圖上所有的節點

2815:城堡問題

4103:踩方格

思想:一直往深處走,直到找到解或者走不下去為止

大體框架:

dfs(dep,.......)

列舉下一種情況,dfs(dep+1,........) }

bfs與dfs的區別

bool dfs(v)

return false;    

} int main()

depth--;

將v恢復為新點 

}int main()

vis[i][j]=1;

int num=0;

if(vis[i-1][j]==0)

num+=dfs(i-1,j,n-1);

if(vis[i][j+1]==0)

num+=dfs(i,j-1,n-1);

if(vis[i][j-1]==0)

num+=dfs(i,j-1,n-1);

vis[i][j]=0;

return num;

}int main()

vis[i][j]=1;

int num=0;

if(vis[i+1][j]==0)

num+=dfs(i+1,j,n-1);

if(vis[i][j+1]==0)

num+=dfs(i,j-1,n-1);

if(vis[i][j-1]==0)

num+=dfs(i,j-1,n-1);

vis[i][j]=0;

return num;

}int main()

;vector>citymap(110);

//二維陣列,每乙個citymap裡面元素又相當於是乙個vector陣列

int minlen=1<<30;

int totallen;

int totalcost;

int visited[110];

int minl[110][10100];

void dfs(int s)

for(int i=0;ik)

continue;

if(totallen+citymap[s][i].l>=minlen || totallen+citymap[s][i].l>=minl[d][cost])

continue;

totallen+=citymap[s][i].l;

totalcost+=citymap[s][i].t;

minl[d][cost]=totallen;

visited[d]=1;

dfs(d);

visited[d]=0;

totalcost-=citymap[s][i].t;

totallen-=citymap[s][i].l;

} }}int main()

//cout<

#define inf 0x3f3f3f3f

int k,n,r;

int u,v,w,e;

struct node

;int vis[1100];

vectorg[1100];

int minlen=inf;

int minl[1100][10100];

void dfs(int s,int money,int len)

for(int i=g[s].size()-1;i>=0;i--)//以s為起點,再找其他的點(s的鄰接點) }

}int main()

{ cin>>k>>n>>r;

for(int i=0;i注意:

1.找最小的路徑長度,所以是  min ,錯寫成max 。

2.判斷條件要寫全。

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

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