從圖中某個頂點v0 出發,訪問此頂點,然後依次從v0的各個未被訪問的鄰接點出發深度優先搜尋遍歷圖,直至圖中所有和v0有路徑相通的頂點都被訪問到(使用堆疊).
//使用鄰接矩陣儲存的無向圖的深度優先遍歷從圖中的某個頂點v0出發,並在訪問此頂點之後依次訪問v0的所有未被訪問過的鄰接點,之後按這些頂點被訪問的先後次序依次訪問它們的鄰接點,直至圖中所有和v0有路徑相通的頂點都被訪問到.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;
}
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...