1.深度优先遍历
尽可能再前进方向上搜索,能进则进,力求达最远顶点
图的深度优先搜索虽然类似树的先序遍历,却不像树的遍历那样有唯一的结果序列。第一,取决于开始遍历的结点不固定;第二,由于对图建立的邻接表不同而不同
int visited[MAX_VERTEX_NUM]={0};
void DFSTraverse(ALGraph g)
{
for(v=0;v<g.vexnum;v++)
if(!visited[v]) DFS(g,v);
}
void DFS(ALGraph g,int v)
{
VisitFunc(v);
visited[v]=1;
p=g.vertexs[v].firstarc;
while(p)
{
if(!visited[p->adjvex])
DFS(g,p->adjvex);
p=p->nextarc;
}
}
2.广度优先搜索
void BFSTraverse(ALGraph g,int v0)
{
for(v=0;v<g.vexnum;v++)
visited[v]=0;
InitQueue(Q);
VisitFunc(v0);
visited[v0]=1;
EnQueue(Q,v0);
while(!QueueEmpty(Q))
{
DeQueue(Q,v);
p=g.vertexs[v].firstarc;
while(p)
{
w=p->adjvex;
if(!visited(w))
{
VisitFunc(w);
visited[w]=1;
EnQueue(Q,w);
}
p=p->nextarc;
}
}
}