深度优先搜索
bool visited[MVNum]; //访问标志数组,初始值为false
//连通图
void DFS(Graph G, int v) //从第v个顶点开始
{
cout << v;
visited[v] = true;
//FirstAdjvex(G,v):表示v的第一个邻接点
//NextAdjvex(G,v,w):表示v的相对于w的下一个邻接点
for(w = FirstAdjvex(G,v); w >= 0; w = NextAdjvex(G,v,w))
{
if(!visited[w])
{
DFS(G,w);
}
}
}
//非连通图
void DFSTraverse(Graph G)
{
for(v=0;v<G.vexnum;v++)
{
visited[v] = false;
}
for(v=0;v<G.vexnum;v++)
{
if(!visited[v])
{
DFS(G,v);
}
}
}
广度优先搜索
//连通图
void BFS(Graph G, int v)
{
cout << v;
visited[v] = true;
//需要一个辅助队列
InitQueue(Q);
EnQueue(Q,v);
while(!QueueEmpty(Q))
{
DeQueue(Q,u);
for(w = FirstAdjvex(G, u); w>=0; w = NextAdjvex(G,u,w)
{
if(!visited[w])
{
//入队列的顶点都要经过一次访问和标记
cout << w;
visited[w] = true;
EnQueue(Q,w);
}
}
}
}
//非连通图
void BFSTraverse(Graph G)
{
for(i=0;i<G.vexnum;i++)
{
visited[i] = false;
}
for(v=0;v<G.vexnum;v++)
{
if(!visited[v])
{
BFS(G,v);
}
}
}