图的深度遍历问题!

intvisited[VEX_NUM]={0};voidDFSTraverseM(MGraph*G,inti)/*从i结点开始深度优先遍历以邻接矩阵存储的图G*/{pri... int visited[VEX_NUM]={0};
void DFSTraverseM(MGraph *G,int i)
/*从i结点开始深度优先遍历以邻接矩阵存储的图G*/
{ printf("%c",G->vexs[i]);
visited[i]=1; /*标志向量初始化*/
for (j=0;i<G->n;j++)
if ((G->adj[i][j]==1)&&(!visited[j]))
DFSTraverseM(G,j);
/*vj未访问,从vj开始DFS搜索*/
}/*DFSTraveseM*/

请问这个对吗?
尤其是for(j=0;i<G->n;j++)这 总感觉是死循环 大神解释下 详细点
展开
 我来答
壤驷曼8R
2012-09-27 · TA获得超过898个赞
知道小有建树答主
回答量:396
采纳率:100%
帮助的人:260万
展开全部
G->n就是G这个图的定点数

for (j=0;i<G->n;j++) 这句是用来检查图中的每个顶点,j就是顶点的编号
if ((G->adj[i][j]==1)&&(!visited[j])) 这句是检查如果编号为i的点和编号为j的点之间有边并且点j没有被访问过
DFSTraverseM(G,j);那么就从j点继续遍历下去
追问
那个i怎么变啊  怎么达到递归结束的条件??
追答
void  DFSTraverseM(MGraph *G,int i)
i是调用函数时输入的参数

能往下递归的只有这一句
if ((G->adj[i][j]==1)&&(!visited[j]))
DFSTraverseM(G,j);
那么if里面的条件不成立时,递归就结束了
代码里面的意思就是,如果现在这个点,跟任何其他点之间都没有边,或者跟它有边的都被访问过了,就不往下递归了
_cf03
2012-09-27 · TA获得超过191个赞
知道小有建树答主
回答量:276
采纳率:0%
帮助的人:121万
展开全部
for (j=0;i<G->n;j
if ((G->adj[i][j]==1)&&(!visited[j]))
DFSTraverseM(G,j);
++)//这不是死循环吧,i不是一直在变的吗,也就是当i的大小等于结点的个数时,就会终止循环的,其实这个循环就是访问一个一个节点的所有相邻结点,如果相邻结点未访问,则将相邻结点作为新的根节点重新进行DFS。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-09-27
展开全部
条件i<G->n 是遍历所有结点,怎么会是死循环呢。深度优先遍历是从一个点出发,优先遍历更远的结点,直到没有为止,再返回重复遍历。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式