| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 9365 人关注过本帖
标题:邻接矩阵图的深度优先遍历
只看楼主 加入收藏
Ocean1
Rank: 2
等 级:论坛游民
帖 子:25
专家分:20
注 册:2016-11-10
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:7 
邻接矩阵图的深度优先遍历
图的深度优先遍历
输入邻接矩阵,输出深度优先遍历
按行排列的邻接矩阵A,矩阵每行元素占用一行,元素间用一个空格间隔,相邻矩阵间用一个空行间隔,处理到文件结束位置为止。
测试数据如下:
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-12-03 20:51
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:4 
1.邻接矩阵、深度优先遍历,这都是比较经典的算法概念,随便百度一下代码一大堆。。。

2.你给的题目压根就不完整。没法做。。。(不过就算你给了完整的题目我也不会想做,你要代码还是去百度吧。要思路的话,这个题貌似也只需要了解一下该算法就能直接套用了。没什么需要灵活变通的吧。)

φ(゜▽゜*)♪
2016-12-03 22:02
Ocean1
Rank: 2
等 级:论坛游民
帖 子:25
专家分:20
注 册:2016-11-10
收藏
得分:0 
回复 2楼 书生牛犊
百度的和这个不一样的,我就是不知道如何直接输入邻接矩阵
2016-12-04 09:49
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:4 
恶补了下邻接矩阵相关知识,有了些了解,但我还不知道你提供的相关输出数据是如何得来的,看来还是要去恶补什么叫深度优先。你提供的两个矩阵数据是无向的,分别是5个顶点和4个顶点的数据,可相当于下式:
邻接矩阵1
  a b c d e
a 0 1 1 0 0
b 1 0 0 0 1
c 1 0 0 1 1
d 0 0 1 0 1
e 0 1 1 1 0
邻接矩阵2
  a b c d
a 0 1 1 1
b 1 0 0 0
c 1 0 0 0
d 1 0 1 0

对应图形如下:
图片附件: 游客没有浏览图片的权限,请 登录注册
2016-12-04 10:20
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:4 
回复 3楼 Ocean1
你这个问题问了这么久,反思一下下次如何提问吧

我猜测啊,你提问的是这两个问题之一

如何将给出input数据处理为数组等形式?

看这一行 矩阵每行元素占用一行,元素间用一个空格间隔,相邻矩阵间用一个空行间隔,处理到文件结束位置为止
所以数据读取过程可以一行一行读取到字符串,读到空行或文件结束位置结束。
将读到的数据按 行和空格 先后拆分为n*n个字符串,最后将这n*n个字符串依次转化为整数


如何将给出数据读入邻接矩阵?

这个具体要看你自己的邻接矩阵是如何定义的,以我上次发给你的代码为例
我上次发的代码是使用长度为5的二维数组表示的,所以读入过程就一行代码
程序代码:
int graph[M][M] = {{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}};

建议你用结构体定义,在结构提中指定矩阵大小(即图的节点数目)


[此贴子已经被作者于2016-12-4 13:39编辑过]



[fly]存在即是合理[/fly]
2016-12-04 13:35
Ocean1
Rank: 2
等 级:论坛游民
帖 子:25
专家分:20
注 册:2016-11-10
收藏
得分:0 
回复 5楼 azzbcc
是第一个问题,不明白怎么回事,不知道怎么输入,可以帮帮我吗
就是已经给出邻接矩阵,怎么按要求将矩阵输入,然后根据深度遍历输出


[此贴子已经被作者于2016-12-4 21:12编辑过]

2016-12-04 21:10
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
回复 6楼 Ocean1
输入重定向到in文件

程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>

#define M 5

typedef struct __tag_node
{
    int data[M][M];
    int count;
} Graph;

int findNext(int pos, Graph *graph, bool visited[])
{
    for (int i = 0; i < graph->count; ++i)
    {
        if (graph->data[pos][i] && !visited[i]) return i;
    }
    return -1;
}

void dft(Graph *graph)
{
    bool visited[M] = {false};

    printf("Graph(%d)\n", graph->count);
    for (int i = 0; i < graph->count; ++i)
    {
        if (visited[i]) continue;

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

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

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

int readGraph(Graph *graph)
{
    char str[128] = {0};

    graph->count = 0;
    while (fgets(str, 128, stdin) != NULL)
    {
        if (str[0] == '\n') return graph->count;
        str[strlen(str) - 1] = '\0'; // 去除fgets读到的换行符

        int pos = 0;
        char *p = strtok(str, " ");
        do
        {
            graph->data[graph->count][pos++] = atoi(p);
            p = strtok(NULL, " ");
        } while (p != NULL);

        graph->count += 1;
    }
    return EOF;
}

int main(int argc, char *argv[])
{
    int flag;
    Graph graph;

    freopen("in", "r", stdin);
    do
    {
        flag = readGraph(&graph);
        if (flag == 0) continue;
        if (graph.count > 0) dft(&graph);
    } while (flag != EOF);

    fclose(stdin);

    return 0;
}


[fly]存在即是合理[/fly]
2016-12-05 16:27
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:0 
回复 7楼 azzbcc
根据题主的要求,你的输出结果要+1.你的输出是0 1 4 2 3
2016-12-05 16:34
快速回复:邻接矩阵图的深度优先遍历
数据加载中...
 
   



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

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