1. 程式人生 > >無向圖中求兩個頂點間的所有路徑演算法

無向圖中求兩個頂點間的所有路徑演算法

int invexset(AdjMultiList g,int vi,EdgeNode *pe,int pk)
{
 VertexData v;
 int vj;
 if(pe->ivex==vi) vj=pe->jvex;
  else vj=pe->ivex;
 v=g.vertex[vj].data;
 vj=pk-1;
 while(vj>=0)
  if(paths[vj]==v) break;
   else vj--;
 return vj;/*返回>0則加入該頂點構成環*/
}
EdgeNode *nextedge(AdjMultiList g,EdgeNode *p,int vi,int sl)
{
  EdgeNode *pn;
  if(!p) return p;
  if(p->ivex==vi) pn=p->ilink; else pn=p->jlink;
  while(pn&&(invexset(g,vi,pn,sl)>=0))
    if(pn->ivex==vi) pn=pn->ilink;
      else pn=pn->jlink;   /*因為無向圖的邊結點關聯二頂點*/
  return pn;
}
EdgeNode *firstedge(AdjMultiList g,int vi,int pk)
{
  EdgeNode *pn;
  pn=g.vertex[vi].firstedge;
  while(pn&&(invexset(g,vi,pn,pk)>=0))
    if(pn->ivex==vi) pn=pn->ilink;/*因為無向圖的邊結點關聯二頂點*/
      else pn=pn->jlink;
  return pn;
}