DS图遍历--深度优先搜索
DS图遍历--深度优先搜索
题目描述
给出一个图的邻接矩阵,对图进行深度优先搜索,从顶点0开始
注意:图n个顶点编号从0到n-1
代码框架如下:


输入
第一行输入t,表示有t个测试实例
第二行输入n,表示第1个图有n个结点
第三行起,每行输入邻接矩阵的一行,以此类推输入n行
第i个结点与其他结点如果相连则为1,无连接则为0,数据之间用空格隔开
以此类推输入下一个示例
输出
每行输出一个图的深度优先搜索结果,结点编号之间用空格隔开
样例输入
样例输出
#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图遍历--深度优先搜索的更多相关文章
- DS图遍历--广度优先搜索
题目描述 代码框架如下: 输入 第一行输入t,表示有t个测试实例 第二行输入n,表示第1个图有n个结点 第三行起,每行输入邻接矩阵的一行,以此类推输入n行 第i个结点与其他结点如果相连则为1,无连接则 ...
- 【算法导论】图的深度优先搜索遍历(DFS)
关于图的存储在上一篇文章中已经讲述,在这里不在赘述.下面我们介绍图的深度优先搜索遍历(DFS). 深度优先搜索遍历实在访问了顶点vi后,访问vi的一个邻接点vj:访问vj之后,又访问vj的一个邻接点, ...
- 图的深度优先搜索dfs
图的深度优先搜索: 1.将最初访问的顶点压入栈: 2.只要栈中仍有顶点,就循环进行下述操作: (1)访问栈顶部的顶点u: (2)从当前访问的顶点u 移动至顶点v 时,将v 压入栈.如果当前顶点u 不存 ...
- 一步一步学数据结构之n--n(图遍历--深度优先遍历--非递归实现)
前面已经说了图的深度优先遍历算法,是用递归实现的,而在这里就讲一下用非递归实现,需要借助栈: 算法思想: 1. 栈初始化 2. 输出起始顶点,起始顶点改为“已访问”标志,将 ...
- "《算法导论》之‘图’":深度优先搜索、宽度优先搜索(无向图、有向图)
本文兼参考自<算法导论>及<算法>. 以前一直不能够理解深度优先搜索和广度优先搜索,总是很怕去碰它们,但经过阅读上边提到的两本书,豁然开朗,马上就能理解得更进一步. 下文将会用 ...
- 图的深度优先搜索(DFS)和广度优先搜索(BFS)算法
深度优先(DFS) 深度优先遍历,从初始访问结点出发,我们知道初始访问结点可能有多个邻接结点,深度优先遍历的策略就是首先访问第一个邻接结点,然后再以这个被访问的邻接结点作为初始结点,访问它的第一个邻接 ...
- 【js数据结构】图的深度优先搜索与广度优先搜索
图类的构建 function Graph(v) {this.vertices = v;this.edges = 0;this.adj = []; for (var i = 0; i < this ...
- 【数据结构与算法Python版学习笔记】图——骑士周游问题 深度优先搜索
骑士周游问题 概念 在一个国际象棋棋盘上, 一个棋子"马"(骑士) , 按照"马走日"的规则, 从一个格子出发, 要走遍所有棋盘格恰好一次.把一个这样的走棋序列 ...
- (转)广度优先搜索BFS和深度优先搜索DFS
1. 广度优先搜索介绍 广度优先搜索算法(Breadth First Search),又称为"宽度优先搜索"或"横向优先搜索",简称BFS. 它的思想是:从图中 ...
随机推荐
- Ubuntu Core 网络配置
/********************************************************************************* * Ubuntu Core 网络配 ...
- Python之路,第一篇:Python入门与基础
第一篇:Python入门与基础 1,什么是python? Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. 2,python的特征: (1)易于学习,易于利用: (2)开 ...
- AE2
2.3缩放属性 ctrl+D 复制图层:这样可以吧这个图层的所有属性都复制过去 然后按着alt键,把图片替换掉 需要做一个倒计时(作业)(到1时做一个烟花效果) 问题:1.按着alt键,把图片替换掉. ...
- 20155219 2016-2017-2 《Java程序设计》第5周学习总结
20155219 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 异常处理 语法与继承构架 异常就是程序在运行时出现的不正常情况.java中的错误以对象的方式 ...
- Linux更改yum源
环境 centos6 阿里云镜像地址 https://opsx.alibaba.com/mirror(本篇所选) centos官网镜像 http://mirror.centos.org/ 网易云镜像地 ...
- C++学习(八)(C语言部分)之 图形库
有关图形库的学习笔记 1.安装 ww.easys.cn 2.创建win32控制台应用程序 .cpp文件(图形库必须创建cpp文件) *重点 3.安装好后 重启一下vs 图形库 是一些函数的集合 作用是 ...
- vue项目的创建
https://jingyan.baidu.com/article/456c463b359e630a5931444e.html
- 学习笔记TF013:卷积、跨度、边界填充、卷积核
卷积运算,两个输入张量(输入数据和卷积核)进行卷积,输出代表来自每个输入的信息张量.tf.nn.conv2d完成卷积运算.卷积核(kernel),权值.滤波器.卷积矩阵或模版,filter.权值训练习 ...
- git使用之放弃本地修改
一,未使用 git add 缓存代码时. 可以使用 git checkout -- filepathname (比如: git checkout -- readme.md ,不要忘记中间的 “-- ...
- 从简单的mongodb example 的观察
https://github.com/no7dw/mongodb-example 这是最基础的连接查询.(branch master) var MongoClient = require('mongo ...