《数据结构》图存储遍历示例
来源:互联网 发布:武汉淘宝产品拍摄公司 编辑:程序博客网 时间:2024/05/16 08:38
大家好,图是一种复杂的结构,存储结构较复杂,下面是一个具体图的邻接矩阵存储方法示例,并实现了深度优先和广度优先遍历输出。
#include<iostream>using namespace std;const int MaxSize=10;template <class DataType>class MGraph{public: MGraph(DataType a[ ], int n, int e); //构造函数,建立具有n个顶点e条边的图 ~MGraph( ) { } //析构函数为空 void DFSTraverse(int v); //深度优先遍历图 void BFSTraverse(int v); //广度优先遍历图private: DataType vertex[MaxSize]; //存放图中顶点的数组 int arc[MaxSize][MaxSize]; //存放图中边的数组 int vertexNum, arcNum; //图的顶点数和边数};template <class DataType>MGraph<DataType>::MGraph(DataType a[ ], int n, int e){int i, j;vertexNum=n; arcNum=e;for (i=0; i<vertexNum; i++)vertex[i]=a[i];for (i=0; i<vertexNum; i++) for (j=0; j<vertexNum; j++)arc[i][j]=0;for (int k=0; k<arcNum; k++){cout<<"请输入边的两个顶点的序号:";cin>>i;cin>>j;arc[i][j]=1; arc[j][i]=1;}}template <class DataType>void MGraph<DataType>::DFSTraverse(int v){cout << vertex[v]; visited[v] = 1;for (int j = 0; j < vertexNum; j++)if (arc[v][j] == 1 && visited[j]==0) DFSTraverse(j);}template <class DataType>void MGraph<DataType>::BFSTraverse(int v){int Q[MaxSize];int front = -1, rear = -1; //初始化队列,假设队列采用顺序存储且不会发生溢出cout << vertex[v]; visited[v] = 1; Q[++rear] = v; //被访问顶点入队while (front != rear) //当队列非空时{v = Q[++front]; //将队头元素出队并送到v中for (int j = 0; j < vertexNum; j++)if (arc[v][j] == 1 && visited[j] == 0 ) { cout << vertex[j]; visited[j] = 1; Q[++rear] = j;}}} int visited[MaxSize]; int main( ){ int n,e; char ch[MaxSize];for(int i=0;i<MaxSize;i++)visited[i]=0; cout<<"请输入顶点数和边数:"; cin>>n>>e; cout<<endl<<"请输入顶点:"; for(int i=0;i<n;i++) cin>>ch[i];MGraph<char> MG(ch, n, e);cout<<"深度优先遍历序列是:";MG.DFSTraverse(0);cout<<endl;for (int i=0; i<MaxSize; i++)visited[i]=0; cout<<"广度优先遍历序列是:";MG.BFSTraverse(0);cout<<endl;system("pause"); return 0;}
运行时界面和输入如下:
请输入顶点数和边数:7 11
请输入顶点:A B C D E F G
请输入边顶点:0 1
请输入边顶点:0 3
请输入边顶点:1 3
请输入边顶点:1 2
请输入边顶点:1 4
请输入边顶点:2 4
请输入边顶点:3 4
请输入边顶点:3 5
请输入边顶点:4 5
请输入边顶点:5 6
深度优先遍历顺序为:A B C E D F G
广度优先遍历顺序为:A B D C E F G
大家可以尝试存储其它图,也可以使用邻接表来存放。祝大家成功!
0 0
- 《数据结构》图存储遍历示例
- 图存储与遍历的一些技巧
- 数据结构-图-as3实现-有向图 图存储(邻接矩阵),广度深度遍历
- 数据结构之(图存储结构之)邻接矩阵
- 数据结构之(图存储结构之)邻接表
- 数据结构-图-Java实现:有向图 图存储(邻接矩阵),最小生成树,广度深度遍历,图的连通性,最短路径
- 数据结构-图-Java实现:有向图 图存储(邻接矩阵),最小生成树,广度深度遍历,图的连通性,最短路径
- 数据结构-图-Java实现:有向图 图存储(邻接矩阵),最小生成树,广度深度遍历,图的连通性,最短路径
- 图存储结构复习
- C++简单的图存储
- 图存储2-邻接表
- opencv视差图存储问题
- 图存储结构—邻接表实现
- 图存储1 临接矩阵
- 图存储3-十字链表
- 图存储4-邻接多重表
- 图存储5-边集数组
- 无向图存储之邻接矩阵实现-Golang版本
- MySQL日期时间函数大全
- 链表的建立和一些基本功能的实现
- NSXMLParser(SAX解析)大文件解析
- Easy way to buy cheap fut coins fifa 15 awfifame and cool?
- Win32 Dialog对话框处理WM_KEYDOWN事件
- 《数据结构》图存储遍历示例
- Ubuntu 14.04 搭建Android开发环境
- hadoop8-序列化
- Mergesort
- java Swing控件桌面程序 更换程序小图标
- poj1094贴一份TLE的代码,以后有可能再优化。
- hdoj 1207 汉诺塔II
- Android 使用Loader示例
- 复数 的 和与减