【数据结构】拾遗(一):图的邻接矩阵创建以及其深广度遍历C++实现
来源:互联网 发布:java类的主方法是啥 编辑:程序博客网 时间:2024/05/20 23:30
图的深度遍历和广度遍历是数据结构的基础,但是大一的时候并没有好好的实现它。现在拾遗也为时不晚。
深度遍历的思想是递归,找到不能找再换未被访问的顶点。
广度遍历的思想是将一个顶点所有邻接顶点访问完,再找未被访问的顶点继续广。
这些概念随便找一个数据结构的书都有,就不废话了。
由于习惯了写类的强迫症,这次我也写了一个类。边的权值有设计但这次就随便设计了,为以后复现prim和Dij算法方便。
自己找了个样例实现了一下:
图是百度百科找的,侵删。
深度遍历结果:
广度遍历结果:
源代码:
#include<iostream>#include<queue>using namespace std;class Map{private://动态顶点数目和动态边int VertexNum, EdgesNum;int *Vertex;int **Edges;bool *visited;public:Map(int Vertex_Num,int Edges_Num, bool flag,int *message);void outputMessage();void BFSfunction(int i);void BFSTraverse();void DFSfunction(int i);void DFSTraverse();void cleanVisited();};//构造函数Map::Map(int Vertex_Num, int Edges_Num, bool flag ,int * message){//边顶动态初始化VertexNum = Vertex_Num;EdgesNum = Edges_Num;Vertex = new int[Vertex_Num];Edges = new int*[Vertex_Num];visited = new bool[Vertex_Num];for (int i = 0; i < Vertex_Num; i++){Edges[i] = new int[Vertex_Num];}//清零for (int i = 0; i < Vertex_Num; i++){visited[i] = false;for (int j = 0; j < Vertex_Num; j++){//-1为最大值Edges[i][j] = -1;}}//赋权值int c = 0;for (int count = 0; count < Edges_Num; count++){Edges[message[c]][message[c + 1]] = message[c + 2];if(flag)//无向图Edges[message[c + 1]][message[c]] = message[c + 2];c = c + 3;}}//测试输入的测试函数void Map::outputMessage(){cout << Edges[1][2] << endl;}//广度遍历void Map::BFSfunction(int i){queue<int> Q;visited[i] = true;cout << i << " ";Q.push(i);while (!Q.empty()){Q.pop();for (int j = 0; j < VertexNum; j++){if (Edges[i][j] != -1 && !visited[j]){cout << j << " ";visited[j] = true;Q.push(j);}}}}void Map::BFSTraverse(){cleanVisited();for (int i = 0; i < VertexNum; i++){if (!visited[i])BFSfunction(i);}cout << endl;}//深度遍历递归void Map::DFSfunction(int i){visited[i] = true;cout << i << " ";for (int j = 0; j < VertexNum; j++){if (Edges[i][j] != -1 && !visited[j]){DFSfunction(j);}}}void Map::DFSTraverse(){cleanVisited();for (int i = 0; i < VertexNum; i++){if (!visited[i])DFSfunction(i);}cout << endl;}//访问设置归零void Map::cleanVisited(){for (int i = 0; i < VertexNum; i++){visited[i] = false;}}//主函数void main(){int vertexnum = 6;int EdgesNum = 9;//每三个为一组:前2个为顶点下标,3位权值。int message[9*3] = { 0,1,1, 0,3,1, 1,2,1, 5,0,1, 2,0,1, 5,4,1, 2,5,1, 4,3,1, 3,2,1};//flag true表示无向图,false表示有向图bool flag = false;Map m(vertexnum, EdgesNum, flag, message);m.BFSTraverse();//m.DFSTraverse();}
阅读全文
0 0
- 【数据结构】拾遗(一):图的邻接矩阵创建以及其深广度遍历C++实现
- C++实现图的邻接矩阵的创建以及其深度优先遍历和广度优先遍历
- 数据结构(C实现)------- 图的邻接矩阵表示
- 数据结构(C实现)------- 图的邻接矩阵表示
- 数据结构C语言版之邻接矩阵(遍历)
- 数据结构(C++)<图的邻接矩阵存储>
- 数据结构——图的BFS的邻接矩阵遍历(BFS是由队列实现的)
- 【数据结构】拾遗(二):连通图邻接矩阵图的prim算法
- 数据结构:图的实现--邻接矩阵
- 数据结构:图的实现--邻接矩阵
- 数据结构---图的邻接矩阵实现
- 数据结构--图的创建以及遍历
- 数据结构之图(C++)--邻接矩阵表示(一)
- 图的邻接矩阵的建立以及遍历
- 数据结构的C实现_图_邻接矩阵表示
- 图的邻接矩阵建立以及遍历方法
- 图的邻接矩阵表示方法以及遍历
- 邻接矩阵图的创建及遍历
- Java GC 专家系列3:GC调优实践
- eclipse运行maven web项目
- tensorflow中的lrn函数详解
- 加快QT工程编译速度
- Eclipse问题集
- 【数据结构】拾遗(一):图的邻接矩阵创建以及其深广度遍历C++实现
- 垃圾回收的算法与实现 pdf
- Contains Duplicate II
- Java GC专家系列1:理解Java垃圾回收
- Android_Framework_WindowManagerService_总述
- Python 爬虫简单实战之CSDN
- Python初学笔记
- CDQ分治--模板 BZOJ 3262--陌上花开【三维偏序】
- bootstrap-markdown使用