DS图遍历–深度优先搜索

DS图遍历–深度优先搜索

DS图遍历–深度优先搜索

题目描述

给出一个图的邻接矩阵,对图进行深度优先搜索,从顶点0开始

注意:图n个顶点编号从0到n-1

代码框架如下:

DS图遍历--深度优先搜索

DS图遍历--深度优先搜索

输入

 

第一行输入t,表示有t个测试实例

第二行输入n,表示第1个图有n个结点

第三行起,每行输入邻接矩阵的一行,以此类推输入n行

第i个结点与其他结点如果相连则为1,无连接则为0,数据之间用空格隔开

以此类推输入下一个示例

输出

每行输出一个图的深度优先搜索结果,结点编号之间用空格隔开

样例输入

2
4
0 0 1 1
0 0 1 1
1 1 0 1
1 1 1 0
5
0 0 0 1 1
0 0 1 0 0
0 1 0 1 1
1 0 1 0 0
1 0 1 0 0

样例输出

0 2 1 3
0 3 2 1 4
#include<iostream>
#include<string>
using namespace std;
const int MaxLen = 20;
class Map {
private:
    bool vist[MaxLen];
    int matrix[MaxLen][MaxLen];
    int vexnum;
    void DFS(int v);
public:
    void setmatrix(int vnum, int mx[MaxLen][MaxLen]);
    void DFSTraverse();
};
void Map::setmatrix(int vnum, int mx[MaxLen][MaxLen]){
    int i, j;
    vexnum = vnum;
    for (i = 0; i < MaxLen; i++)
        for (j = 0; j < MaxLen; j++)
            matrix[i][j] = 0;
    for (i = 0; i < vexnum; i++)
        for (j = 0; j < vexnum; j++)
            matrix[i][j] = mx[i][j];
}
void Map::DFSTraverse(){
    for (int i = 0; i < MaxLen; i++)
        vist[i] = false;
    for (int i = 0; i < vexnum; i++)
        if (!vist[i])
            DFS(i);
}
void Map::DFS(int v){
    int w, i, k;
    cout << v << " ";
    vist[v] = true;
    int *adjvex = new int[vexnum];
    for (i = 0; i < vexnum; i++)
        adjvex[i] = -1;
    k = 0;
    for (i = 0; i < vexnum; i++)
        if (matrix[v][i] == 1)
            adjvex[k++] = i;
    i = 0;
    for (w=adjvex[i]; w >=0;w=adjvex[++i])
    {
        if (!vist[w])
            DFS(w);
    }
    delete[]adjvex;
}
int main(){
    int t;
    cin >> t;
    while (t--){
        int n;
        cin >> n;
        int a[MaxLen][MaxLen];
        for (int i = 0; i < n; i++)
            for (int j = 0; j < n; j++)
                cin >> a[i][j];
        Map map;
        map.setmatrix(n, a);
        map.DFSTraverse();
        cout << endl;
    }
}

 

转载于:https://www.cnblogs.com/Liu269393/p/10222700.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101221.html原文链接:https://javaforall.net

(0)
上一篇 2021年6月19日 下午5:00
下一篇 2021年6月19日 下午6:00


相关推荐

  • 无锁环形缓冲区的详细解释

    无锁环形缓冲区的详细解释由以下博客的分析可以知道,内核的kfifo使用了很多技巧以实现其高效性。比如,通过限定写入的数据不能溢出和内存屏障实现在单进程写单进程读的情况下不使用锁。因为锁是使用在共享资源可能存在冲突的情况下。还用设置buffer缓冲区的大小为2的幂次方,以简化求模运算。通过使用unsignedint为kfifo的下标,可以不用考虑每次下标超过size时对下表进行取模运算赋值,这里使用到了无符号整数的溢出回

    2022年5月21日
    90
  • OpenClaw云部署实践

    OpenClaw云部署实践

    2026年3月13日
    3
  • ubuntu下安装中文输入法_ubuntu下载中文输入法

    ubuntu下安装中文输入法_ubuntu下载中文输入法文章目录前言基础准备ibus(IntelligentInputBus)fcitx(FlexibleInputMethodFramework)前言Ubuntu中安装中文输入法相比Windows上要复杂不少(其实也不算复杂,就是步骤上要稍微多一些)。这篇文章将基于UbuntuDesktop20.04进行中文输入法安装说明。基础准备首先要安装中文输入法的话ibus(IntelligentInputBus)fcitx(FlexibleInputMethodFramework)

    2026年4月14日
    4
  • hashmap线程安全吗 什么解决方案_hashtable为什么是线程安全

    hashmap线程安全吗 什么解决方案_hashtable为什么是线程安全前言该试题从互联网获得,真实性没有考究,加上本人学识浅薄,所以面试题参考为主,解析分享为主。若对解析有不同看法,还请评论指正。谢谢。HashMap为什么不是线程安全?以JDK1.8的HashMap为例,引用作者:一字马胡所写文章中的一张图:上图为…

    2026年4月13日
    4
  • 大数据竞赛解决方案

    大数据竞赛解决方案第一章建设背景1.1政策分析2017年1月工业和信息化部正式发布了《大数据产业发展规划(2016-2020年)》,明确了“十三五”时期大数据产业的发展思路、原则和目标,将引导大数据产业持续健康发展,有力支撑制造强国和网络强国建设。2018年9月工信部公示“2018年大数据产业发展试点示范项目名单”,公布了包括大数据存储管理、大数据分析挖掘、大数据安全保障、产业创新大数据应用、…

    2022年6月1日
    212
  • 消息称字节叫停豆包 AI 眼镜

    消息称字节叫停豆包 AI 眼镜

    2026年3月16日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号