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

题目描述

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

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

代码框架如下:

输入

第一行输入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 = ;
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 = ; i < MaxLen; i++)
for (j = ; j < MaxLen; j++)
matrix[i][j] = ;
for (i = ; i < vexnum; i++)
for (j = ; j < vexnum; j++)
matrix[i][j] = mx[i][j];
}
void Map::DFSTraverse(){
for (int i = ; i < MaxLen; i++)
vist[i] = false;
for (int i = ; 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 = ; i < vexnum; i++)
adjvex[i] = -;
k = ;
for (i = ; i < vexnum; i++)
if (matrix[v][i] == )
adjvex[k++] = i;
i = ;
for (w=adjvex[i]; w >=;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 = ; i < n; i++)
for (int j = ; j < n; j++)
cin >> a[i][j];
Map map;
map.setmatrix(n, a);
map.DFSTraverse();
cout << endl;
}
}

DS图遍历--深度优先搜索的更多相关文章

  1. DS图遍历--广度优先搜索

    题目描述 代码框架如下: 输入 第一行输入t,表示有t个测试实例 第二行输入n,表示第1个图有n个结点 第三行起,每行输入邻接矩阵的一行,以此类推输入n行 第i个结点与其他结点如果相连则为1,无连接则 ...

  2. 【算法导论】图的深度优先搜索遍历(DFS)

    关于图的存储在上一篇文章中已经讲述,在这里不在赘述.下面我们介绍图的深度优先搜索遍历(DFS). 深度优先搜索遍历实在访问了顶点vi后,访问vi的一个邻接点vj:访问vj之后,又访问vj的一个邻接点, ...

  3. 图的深度优先搜索dfs

    图的深度优先搜索: 1.将最初访问的顶点压入栈: 2.只要栈中仍有顶点,就循环进行下述操作: (1)访问栈顶部的顶点u: (2)从当前访问的顶点u 移动至顶点v 时,将v 压入栈.如果当前顶点u 不存 ...

  4. 一步一步学数据结构之n--n(图遍历--深度优先遍历--非递归实现)

    前面已经说了图的深度优先遍历算法,是用递归实现的,而在这里就讲一下用非递归实现,需要借助栈: 算法思想:        1. 栈初始化        2. 输出起始顶点,起始顶点改为“已访问”标志,将 ...

  5. "《算法导论》之‘图’":深度优先搜索、宽度优先搜索(无向图、有向图)

    本文兼参考自<算法导论>及<算法>. 以前一直不能够理解深度优先搜索和广度优先搜索,总是很怕去碰它们,但经过阅读上边提到的两本书,豁然开朗,马上就能理解得更进一步. 下文将会用 ...

  6. 图的深度优先搜索(DFS)和广度优先搜索(BFS)算法

    深度优先(DFS) 深度优先遍历,从初始访问结点出发,我们知道初始访问结点可能有多个邻接结点,深度优先遍历的策略就是首先访问第一个邻接结点,然后再以这个被访问的邻接结点作为初始结点,访问它的第一个邻接 ...

  7. 【js数据结构】图的深度优先搜索与广度优先搜索

    图类的构建 function Graph(v) {this.vertices = v;this.edges = 0;this.adj = []; for (var i = 0; i < this ...

  8. 【数据结构与算法Python版学习笔记】图——骑士周游问题 深度优先搜索

    骑士周游问题 概念 在一个国际象棋棋盘上, 一个棋子"马"(骑士) , 按照"马走日"的规则, 从一个格子出发, 要走遍所有棋盘格恰好一次.把一个这样的走棋序列 ...

  9. (转)广度优先搜索BFS和深度优先搜索DFS

    1. 广度优先搜索介绍 广度优先搜索算法(Breadth First Search),又称为"宽度优先搜索"或"横向优先搜索",简称BFS. 它的思想是:从图中 ...

随机推荐

  1. Samsung_tiny4412(驱动笔记06)----list_head,proc file system,GPIO,ioremap

    /**************************************************************************** * * list_head,proc fil ...

  2. C语音,关于可变参数的宏定义

    typedef char * va_list; // TC中定义为void* //为了满足需要内存对齐的系统 #define _INTSIZEOF(n) ((sizeof(n)+sizeof(int) ...

  3. Unity导航系统Navigation使用教程

    Unity开发VR之Vuforia 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...

  4. java-抽象类的特点

    1.抽象类和抽象方法必须用abstract关键字修饰. - abstract class 类名() - public abstract void eat(); 2.抽象类不一定有抽象方法,有抽象方法的 ...

  5. 初识Odoo的辅助核算

    Odoo财务里类似辅助核算功能的叫做:Analytic Accouting,翻译为,分析会计. 再说说辅助核算是个什么东东. 财务辅助核算就是基于会计科目和会计理论分析财务数据的辅助工具. 简单的说就 ...

  6. java黑魔法-反射机制-02-通过Java反射调用其他类方法

    package com.aaron.reflect; import java.lang.reflect.Method; import java.lang.reflect.InvocationTarge ...

  7. linux杀死进程方法

    方法一: 根据pid ps -aux|grep 你的进程 方法二: 删除pid文件 [root@localhost ~]# /etc/init.d/redis_6380 start /var/run/ ...

  8. centos7.0之vsftpd随笔

    yum install vsftpd -f安装vsftpd软件 systemctl start vsftpd 默认ftp目录为/var/ftp/,该文件夹下有pub文件夹 iptables -F 防火 ...

  9. 使用prometheus+ grafana+nginx-module-vts 模块监控openresty

      nginx-module-vts 是一个很不错的nginx 模块,我们可以用来,方便的分析系统的请求状态 同时支持基于prometheus 的监控, 我参考openresty 的docker镜像已 ...

  10. chrome浏览器好用的插件

    1.Chrome批量保存所有选项卡网址 + 批量打开复制网址小插件 批量保存所有选项卡网址插件:Copy All Urls 经常搜索一些东西,下班时无法处理完所有网页内容,比如做笔记什么的,又不舍得关 ...