图的遍历(基于邻接表)

//大家好,前几天更新的用邻接表来存储图的文章里面,并没有提及图的遍历这回事啊,所以呢,在这里不回来!!



//在下要介绍的是“深度优先遍历” (如果下面的代码有错,请见谅)





///////////////////////  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) 

 即可!!!!



希望这会对你有帮助!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值