前言
这道题开始一直不太理解,记录下来,水平有限,有错误请斧正。
正文
题目
输出从u到v所有简单路径
f是得到下一个firstarc的意思,next是下一个nextarc,黑色弧线代表递进,蓝色弧线代表回溯。
补充:一边回溯一边把结点visited置为0;
代码
void FindPath(AGraph *G,int u,int v,int path[ ],int d)
{
int w,i;
ArcNode *p;
d++;
path[d]=u;
visited[u]=1;//路径长度增1
if(u==v)
{
for(i=0;i<=d;i++)
printf("%2d",path[i]);
printf("\n");
}
p=G->adjlist[u].firstarc;//p指向v的第一个相邻点
while(p!=NULL)
{
w=p->adjvex;
if(visited[w]==0)//若w顶点未访问,递归访问它
FindPath(G,w,v,path,d);
p=p->nextarc;//p指向v的下一个邻接点
}
//要写在外面,每次回溯把相应结点置为0
visited[u]=0;//恢复环境,使该顶点可重新使用
}