void dfs(int x)
{
int i;
push(x); //首先将当前正在dfs中的顶点入栈
Adj *p=NULL; //定义一个指针p,当然这只是用来引入邻接链表的
p=V[x].first;
while(p){ //遍历x的所有出边
if (T[p->Adjv].known==0) //如果相连的点没有被标记,则可以选取,若已经被标记那么 说明再选取会出现圈的问题,是不合法的。
{
if (p->Adjv==1) { //这里的1是终点,如果到达终点,下面则输出栈中的元素,即路径
for (i=head;i<tail;i++) printf("%d-->",q[i]);
printf("1\n");
} else //若没有到达终点,则继续以后面的顶点dfs搜索
{
dfs(p->Adjv);
pop(); //dfs结束后没有路径可以找到时,出栈回溯
}
}
p=p->next; //继续遍历x的出边
}
}
p.s.我把标记放在了pop和push函数中
如下:
void push(int x)
{
q[tail++]=x;
T[x].known=1;
}
void pop(){
T[q[--tail]].known=0;
}
主要思路是参考了如下链接:C语言打印图中两点之间的所有路径,不是最短路径!!!谢谢高手麻烦帮忙 代码要实现哈!_百度知道