資料結構基礎 21 DFS與BFS

2022-04-29 19:21:15 字數 1648 閱讀 8858

從圖中某個頂點v0 出發,訪問此頂點,然後依次從v0的各個未被訪問的鄰接點出發深度優先搜尋遍歷圖,直至圖中所有和v0有路徑相通的頂點都被訪問到(使用堆疊).

//使用鄰接矩陣儲存的無向圖的深度優先遍歷

template void graph::dfs()

else

}//使其還可以再深/廣度優先搜尋

for (int i = 0; i < nverts; ++i)

vertexlist[i]->wasvisted = false;

}

從圖中的某個頂點v0出發,並在訪問此頂點之後依次訪問v0的所有未被訪問過的鄰接點,之後按這些頂點被訪問的先後次序依次訪問它們的鄰接點,直至圖中所有和v0有路徑相通的頂點都被訪問到.

若此時圖中尚有頂點未被訪問,則另選圖中乙個未曾被訪問的頂點作起始點,重複上述過程,直至圖中所有頂點都被訪問到為止(使用佇列)。

//使用鄰接矩陣儲存的無向圖的廣度優先遍歷

template void graph::bfs()

}for (int i = 0; i < nverts; ++i)

vertexlist[i]->wasvisted = false;

}

const int max_verts = 20;

//頂點

template class vertex

public:

bool wasvisted; //增加乙個訪問位

type node;

};//圖

template class graph

;template void graph::dfs()

else

}//使其還可以再深度優先搜尋

for (int i = 0; i < nverts; ++i)

vertexlist[i]->wasvisted = false;

}template void graph::bfs()

}for (int i = 0; i < nverts; ++i)

vertexlist[i]->wasvisted = false;

}//獲取下乙個尚未訪問的連通節點

template int graph::getadjunvisitedvertex(int v)

return -1;

}//列印節點資訊

template void graph::showvertex(int v)

template graph::graph():nverts(0)

template graph::~graph()

template void graph::addvertex(const type &vertex)

template void graph::addedge(int start, int end)

template void graph::printmatrix()

}//測試**

int main()

資料結構與演算法(bfs與dfs)

引言 經過上一次的學習,我們明白了圖的基本操作。這一次,我們學習圖的兩種基本演算法 bfs與dfs。2.bfs演算法 後記介紹 dfs演算法也叫深度優先搜尋,核心思想是從某一位置或者狀態出發,進行搜尋,直到找到為止。形象的可以認為是所有的可能都走一邊,既暴力。深度優先遍歷圖的方法是,從圖中某頂點v出...

資料結構 遞迴與非遞迴實現DFS與BFS

我皮了一下用 c c c 的vector寫的,其實也不難詳情請參見 如果有不會dfs與bfs的 參見 資料 遞迴bfs include using namespace std const int maxn 1e5 50 vector int g maxn int n m u v st queue i...

資料結構之DFS和BFS演算法

include include using namespace std typedef int status typedef char vertextype typedef int selemtype typedef int arctype define mvnum 100 define maxsi...