//大家好,前几天更新的用邻接表来存储图的文章里面,并没有提及图的遍历这回事啊,所以呢,在这里不回来!!
//在下要介绍的是“深度优先遍历” (如果下面的代码有错,请见谅)
/////////////////////// head.h ////////////////////////////////
//接着上一次的程序就行了
int visited[MAX_VERTEX_NUM];
char ReturnValue( ALGraph G, int i )
{
if( i>=0 && i<G.vecNum )
{
return G.vertices[i].data;
}
else
{
cout<<" error of return value "<<endl;
exit(-1);
}
}
int FirstAdjVertux( ALGraph G, int v )//第一个邻接的顶点
{
ArcNode *p;
if( v!=-1 )
{
p=G.vertices[v].firstArc;
if( p!=NULL )
{
return p->adjvex;
}
return -1;
}
return -1;
}
int NextAdjVertex( ALGraph G, int vi, int vj )//下一个邻接顶点
{
ArcNode *p;
if( vi!=-1 )
{
p=G.vertices[vi].firstArc;
while( p!=NULL )
{
if( p->adjvex==vj && p->nextArc!=NULL )
{
return p->nextArc->adjvex;
}
else
{
p=p->nextArc;
}
}
}
return -1;
}
void dfs( ALGraph G, int v )
{
int u=1;
cout<<ReturnValue(G,v);
visited[v]=1;
u=FirstAdjVertux(G,v);
while( u!=-1 )
{
if( !visited[u] )
{
dfs(G,u);
}
u=NextAdjVertex(G,v,u);
}
}
void DFS( ALGraph G )
{
int i;
for( i=0; i<G.vecNum; i++ )
{
visited[i]=0;
}
for( i=0; i<G.vecNum; i++ )
{
if( !visited[i] )
{
dfs(G,i);
}
}
}
在主程序中加上
DFS(G)
即可!!!!
希望这会对你有帮助!!!!
图的遍历(基于邻接表)
最新推荐文章于 2022-08-19 11:04:05 发布