| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3974 人关注过本帖
标题:图的深度优先遍历,求代码
只看楼主 加入收藏
Ocean1
Rank: 2
等 级:论坛游民
帖 子:25
专家分:20
注 册:2016-11-10
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
图的深度优先遍历,求代码
已知用邻接矩阵A形式表示的无向图G,满足:
如果图G中存在边(vi,vj),则A[i][j]=1,否则A[i][j]=0。
顶点编号从1到n,从1号顶点开始以深度优先遍历方式输出图G中的每个顶点(有多个邻接点时按照序号从小到大顺序访问),对于非连通图按照顶点编号顺序选择下一个未遍历顶点继深度优先遍历。
Input
按行排列的邻接矩阵A,矩阵每行元素占用一行,元素间用一个空格间隔,相邻矩阵间用一个空行间隔,处理到文件结束位置为止。
Output
从1号顶点开始按照深度优先遍历顺序输出图G中的每个顶点,顶点编号间用一个空格间隔,每个无向图的输出占用一行。
Sample Input

0 1 1 0 0
1 0 0 0 1
1 0 0 1 1
0 0 1 0 1
0 1 1 1 0

0 1 1 1
1 0 0 0
1 0 0 1
1 0 1 0

Sample Output

1 2 5 3 4
1 2 3 4
搜索更多相关主题的帖子: 元素 
2016-11-26 16:46
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:14 
程序代码:
int findNext(int pos, int (*graph)[M], bool visited[M])
{
    for (int i = 0; i < M; ++i)
    {
        if (graph[pos][i] && !visited[i]) return i;
    }
    return -1;
}

void dfs(int (*graph)[M])
{
    bool visited[M] = {false};
    for (int i = 0; i < M; ++i)
    {
        if (visited[i]) continue;

        visited[i] = true;
        printf("%d\n", i);  // 打印节点

        int pos = i;
        while (true)
        {
            pos = findNext(pos, graph, visited);
            if (-1 == pos) break;

            visited[pos] = true;
            printf("%d\n", pos);
        }
    }
}


[fly]存在即是合理[/fly]
2016-11-26 23:42
Ocean1
Rank: 2
等 级:论坛游民
帖 子:25
专家分:20
注 册:2016-11-10
收藏
得分:0 
回复 2楼 azzbcc
这个是那一部分啊,有所有源代码吗?
2016-11-27 09:03
快速回复:图的深度优先遍历,求代码
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032482 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved