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. Python之路,第十八篇:Python入门与基础18

    python3  面向对象编程2 类方法: @classmethod 作用:1,类方法是只能访问类变量的方法: 2,类方法需要使用@classmethod 装饰器定义: 3,类方法的第一个参数是类的实 ...

  2. HDU 6345:子串查询(前缀和)

    子串查询 Time Limit: 3500/3000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Sub ...

  3. (8)视图层参数request详解

    PS:浏览器页面请求的都是get请求 PS:post请求是通过form表单,阿贾克斯发 request里面的常用方法 def index(request): print(request.META) # ...

  4. Python基础之二进制

    引子 首先,计算机一共就能做两件事:计算和通信 那在讲计算机之前,我们先来讲一个故事,大家知道古时候的中国是如何通信的么? 假如,战国时期两个国家要打仗了,我们垒了城墙,每隔一段就有兵镇守,现在有人来 ...

  5. 《DSP using MATLAB》Problem 6.24

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

  6. python------模块定义、导入、优化 ------->Yaml, l模块

    一. yaml模块 用来做配置文件. 需要pip安装该包. 二. ConfigParser模块 用来生成和修改常见配置文件,在python3.x版本中更名为configparser. (什么是配置文件 ...

  7. shell 修改工作路径

    import os os.getcwd() #查看现路径 os.chdir('新路径') #修改路径

  8. C# 远程调用实现案例

    C#远程调用实现案例 2007年11月19日 13:45:00 阅读数:6012 C#实现远程调用主要用到“System.Runtime.Remoting”这个东西.下面从三个方面给于源码实例. ·服 ...

  9. Revit 开发将自己的窗口设置为Revit窗口

    在Revit开发中如果使用modeless的对话框,经常容易被Revit窗体覆盖,但是如果将窗体设为Topmost的话,当Revit失去焦点后,它又会遮住其他程序的界面,比如将Revit最小化后,To ...

  10. oracle之 安装oracle指定jdk 或者如何解决提示框显示不全

    在centos7下,安装oracle 11g. gnome的桌面.各个参数配置好后,运行runInstaller命令.此时弹出安装界面,在一次次点击[下一步]的时候,中间会弹出对话框,可是对话框显示不 ...