图的深度遍历递归算法问题?

一墨千里无色 2018-05-13 03:40:51
算法如下:递归实现

(1)访问顶点v;visited[v]=1;//算法执行前visited[n]=0

(2)w=顶点v的第一个邻接点;

(3)while(w存在)

if(w未被访问)

从顶点w出发递归执行该算法; w=顶点v的下一个邻接点;


网上找的,估计大神们应该看了一眼就知道代码怎么写了,我就不贴了。。懒得打字。
那么请问,递归进去之后,如果遇到了已经访问过的节点,那么就不会执行if,那么就执行 w=顶点v的下一个邻接点;
再推出该递归。
以上分析对吧?那么我不懂的是,然后呢,退出去之后还会执行上一层的 w=顶点v的下一个邻接点,然后不就结束了吗,怎么继续递归呢?
麻烦大佬详细讲一下这里怎么递归的吧,很晕
...全文
1133 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
leetow2006 2018-05-31
  • 打赏
  • 举报
回复
图如何输入电脑
赵4老师 2018-05-14
  • 打赏
  • 举报
回复
《算法精解(C语言描述)》 “给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门! 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出
待续_1006 2018-05-14
  • 打赏
  • 举报
回复
调试才是正道
一墨千里无色 2018-05-14
  • 打赏
  • 举报
回复
大哥们啊讲讲实际的吧,以上没有用处啊
paschen 2018-05-13
  • 打赏
  • 举报
回复
单步跟踪程序运行,观察程序运行流程及变量变化
一墨千里无色 2018-05-13
  • 打赏
  • 举报
回复
求解答啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊。
一墨千里无色 2018-05-13
  • 打赏
  • 举报
回复
小弟的代码如下: #include<iostream.h> #include<stdlib.h> #define max 8 typedef struct ArcNode{//边结点 int adjvex; struct ArcNode *nextarc; }ArcNode; typedef struct VNode{//头结点 char data; ArcNode *firstarc; }VNode,AdjList[max]; typedef struct { AdjList vertices; int vexnum,arcnum; }AlGraph; void creat(AlGraph &G); void DFS(AlGraph &G,int v); int LocatedVex(AlGraph &G,char b); int main() { AlGraph G; creat(G); cout<<"开始深度优先遍历结点"<<endl; DFS(G,0);//深度优先遍历 return 0; } void creat(AlGraph &G) { ArcNode *p1,*p2;//先定义后使用 char a,b; int i,k,j; cout<<"输入结点数和边数"<<endl; cin>>G.vexnum>>G.arcnum; cout<<"输入结点的值"<<endl; for(i=0;i<max;i++) { cin>>G.vertices[i].data; G.vertices[i].firstarc=NULL; } for(k=0;k<max;k++) { cout<<"输入一条边上的两个结点"<<endl; cin>>a>>b; i=LocatedVex(G,a);j=LocatedVex(G,b);//确定这两个结点的位置 p1=new ArcNode;//创造一个边结点 p1->adjvex=j;// p1->nextarc=G.vertices[i].firstarc;G.vertices[i].firstarc=p1;//从前插入 p2=new ArcNode;//创造一个边结点 p2->adjvex=i;// p2->nextarc=G.vertices[j].firstarc;G.vertices[j].firstarc=p2;//从前插入 } } int LocatedVex(AlGraph &G,char b) { int i,j; for(i=0;i<max;i++) { if(G.vertices[i].data==b) j=i; } return j; } void DFS(AlGraph &G,int v) { int i,visit[max]; ArcNode *p; for(i=0;i<max;i++) visit[i]=0; cout<<G.vertices[v].data<<endl; visit[v]=1; p=G.vertices[v].firstarc; while(p!=NULL){ if(visit[p->adjvex]==0) DFS(G,p->adjvex); p=p->nextarc; } } 最后出不来。。。一直在循环

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧