無向圖中求兩個頂點間的所有路徑演算法
阿新 • • 發佈:2019-02-20
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;
}
{
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;
}