邻接矩阵/邻接表的遍历方法
来源:互联网 发布:网络大电影收益来源 编辑:程序博客网 时间:2024/05/24 04:41
根据大话数据结构整理
/***********************************输入:邻接矩阵vMatrix/邻接表vList, 顶点表vNode*输出:遍历vva元素***********************************/#include <iostream>#include <vector>#include <queue>using namespace std;#define INF 5000/*******邻接矩阵深度优先遍历****************/void DFSMatrix(vector<vector<int>> &vvEdge, vector<int > &vNode, vector<bool> &visit, int i){ visit[i] = true; cout << vNode[i] << " "; for (unsigned j = 0; j < vNode.size(); j++) if (vvEdge[i][j] == 1 && !visit[j]) DFSMatrix(vvEdge, vNode, visit, j); return;}void DFSAdjMatrix(vector<vector<int>> &vvEdge, vector<int > &vNode){ vector<bool> visit(vNode.size() + 1); for (unsigned i = 0; i < vNode.size(); i++) if (!visit[i]) DFSMatrix(vvEdge, vNode, visit, i); cout << endl; return;}/*******邻接表深度优先遍历****************/void DFSList(vector<vector<int>> &vvEdge, vector<int > &vNode, vector<bool> &visit, int i){ visit[i] = true; cout << vNode[i] << " "; for (unsigned j = 0; j < vvEdge[i].size(); j++) { int index = vvEdge[i][j]; if (!visit[index]) DFSList(vvEdge, vNode, visit, index); } return;}void DFSAdjList(vector<vector<int>> &vvEdge, vector<int > &vNode){ vector<bool> visit(vNode.size() + 1); for (unsigned i = 0; i < vNode.size(); i++) if (!visit[i]) DFSList(vvEdge, vNode, visit, i); cout << endl; return;}/**********邻接矩阵广度优先遍历******************/void BFSAdjMatrix(vector<vector<int>> &vvEdge, vector<int > &vNode){ vector<bool> visit(vNode.size() + 1); queue<int> Q; for (unsigned i = 0; i < vNode.size(); i++) { if (!visit[i]) { visit[i] = true; cout << vNode[i] << " "; Q.push(i); while (!Q.empty()) { i = Q.front(); Q.pop(); for (unsigned j = 0; j < vNode.size(); j++) { if (vvEdge[i][j] == 1 && !visit[j]) { visit[j] = true; cout << vNode[j] << " "; Q.push(j); } } } } } cout << endl; return;}/**********邻接表广度优先遍历******************/void BFSAdjList(vector<vector<int>> &vvEdge, vector<int > &vNode){ vector<bool> visit(vNode.size() + 1); queue<int> Q; for (unsigned i = 0; i < vNode.size(); i++) { if (!visit[i]) { visit[i] = true; cout << vNode[i] << " "; Q.push(i); while (!Q.empty()) { i = Q.front(); Q.pop(); for (unsigned j = 0; j < vvEdge[i].size(); j++) { int index = vvEdge[i][j]; if (!visit[index]) { visit[index] = true; cout << vNode[index] << " "; Q.push(index); } } } } } cout << endl; return;}/*********主函数****************/int main(){ int N, data1, data2; cin >> N; vector<int> v(N); for (int i = 0; i < N; i++) cin >> v[i]; cin >> N; /******建立邻接矩阵/邻接表**********/ vector<vector<int>> vMatrix(v.size(), vector<int>(v.size(), INF)); vector<vector<int>> vList(v.size()); for(unsigned j = 0; j < v.size(); j++) vMatrix[j][j] = 0; for (int i = 0; i < N; i++) { cin >> data1 >> data2; vMatrix[data1][data2] = 1; vMatrix[data2][data1] = 1; vList[data1].push_back(data2); vList[data2].push_back(data1); } /// //for (int i = 0; i < vList.size(); i++) //{ // cout << i << ": "; // for (int j = 0; j < vList[i].size(); j++) // cout << vList[i][j] << " "; // cout << endl; //} /// cout << "邻接矩阵深度优先遍历:" << endl; DFSAdjMatrix(vMatrix, v); cout << "邻接表深度优先遍历:" << endl; DFSAdjList(vList, v); cout << "邻接矩阵广度优先遍历:" << endl; BFSAdjMatrix(vMatrix, v); cout << "邻接表广度优先遍历:" << endl; BFSAdjList(vList, v); return 0;}/*case:顶点数n,n个顶点的编号;边数m,m条边*//*91 2 3 4 5 6 7 8 9150 10 51 21 81 62 32 83 43 73 63 84 54 75 66 7*/
阅读全文
0 0
- 邻接矩阵/邻接表的遍历方法
- 图的邻接表 邻接矩阵 深度优先遍历DFS
- 邻接矩阵和邻接表的深度优先遍历
- 图的广度优先搜索遍历(邻接表&邻接矩阵)(C++)
- 图的遍历与输出 (邻接矩阵和邻接表)
- 数据结构--图之邻接矩阵&邻接表&图的遍历
- 数据结构图的建立和遍历(邻接表、邻接矩阵)
- 数据结构 学习笔记(七):图(上):图的表示方法(邻接表,邻接矩阵),遍历(DFS,BFS)
- 图基本算法 ,图的表示方法 邻接矩阵 邻接表
- [C++]图的邻接矩阵、邻接表及其相互转化和邻接表的广度遍历、深度遍历
- 深度遍历和广度遍历,邻接表和邻接矩阵
- 邻接矩阵(以顶点为中心),比较稀疏时,采用邻接表;图的两种遍历(邻接矩阵实现)
- 图的遍历(BFS、DFS的邻接矩阵和邻接表实现)
- 邻接矩阵存储结构 和 邻接表存储结构 的深度优先搜索遍历
- 数据结构实验图论:基于邻接矩阵/邻接表的广度优先搜索遍历(BFS)
- 图的深度优先遍历DFS(分别以邻接矩阵和邻接表实现)
- 图的广度优先遍历BFS(分别以邻接矩阵和邻接链表实现)
- 数据结构实验图论:基于邻接矩阵/邻接表的广度优先搜索遍历
- 运维-安装系列文件之操作步骤
- hdu1867—A + B for you again
- Visual Studio中使用开源二维码QR库libqr
- 网页编程--CSS(一)
- HDOJ1558 线段相交问题+并查集处理
- 邻接矩阵/邻接表的遍历方法
- pycharm右键为什么会出现 "Run 'Unittests' in xxx.py"
- C++模板实现双向链表
- spark2.2.0源码学习过程记录:Day1 Day2
- Java并发编程的暗自努力(一)初步介绍
- hexo+github搭建个人博客(超详细教程)
- java 基础之入门第一个坑 错误:找不到或无法加载主类
- varnish入门理解
- Redis数据库存储类型