
C++使用邻接矩阵储存图与DFS、BFS遍历(使用类模板)
发布日期:2021-05-07 23:14:30
浏览次数:35
分类:原创文章
本文共 2443 字,大约阅读时间需要 8 分钟。
使用邻接矩阵储存图
/* 使用邻接矩阵储存图 */#include <iostream>#include <queue>using namespace std;bool visited[10] = { 0,0,0,0,0,0,0,0,0,0};const int MaxSize=10; //最大顶点数template <class DataType>class Mgraph{ public: Mgraph(DataType a[], int n, int e); void Output(); void DFS(int v); void BFS(int v); private: DataType vertex[MaxSize]; //顶点数组 int arc[MaxSize][MaxSize]; //邻接矩阵 int vertexNum, edgeNum; //图中当前的顶点数与边数};/** 构造函数 *@param n 顶点数 *@param e 边数 */template <class DataType>Mgraph<DataType> :: Mgraph(DataType a[], int n, int e){ int i,j,k; vertexNum = n; edgeNum = 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 (k = 0; k < edgeNum; k++) //依次输入每一条边 { cin >> i >> j; //输入边依附的两个顶点的编号 arc[i][j] = 1; arc[j][i] = 1; //置有边标志 }}//输出邻接矩阵函数template <class DataType>void Mgraph<DataType> :: Output(){ int i,j; for (i = 0; i < vertexNum; i++){ //输出邻接矩阵 for (j = 0; j < vertexNum; j++){ cout << arc[i][j] <<" "; } cout << endl; }}template <class DataType>void Mgraph<DataType> :: DFS(int v){ cout<<vertex[v]<<" "; //输出顶点的值 visited[v] = true; //标记被访问 for(int j=0; j<vertexNum; j++){ //j 小于顶点数时 if(arc[v][j]==1 && visited[j]==false){ DFS(j); } }}template <class DataType>void Mgraph<DataType> :: BFS(int v)//传入顶点序号{ bool visited[10] = { 0,0,0,0,0,0,0,0,0,0}; queue<int> Q;//初始化顺序队列 cout << vertex[v] <<" "; //输出顶点 visited[v] = true; //标记被访问 Q.push(v); //顶点v入队列 while(!Q.empty())//当队列非空时 { v = Q.front();//将队头元素取出送到v中 Q.pop(); for(int j=0; j < vertexNum; j++){ //小于顶点个数时 if(arc[v][j] == 1 &&visited[j] == false){ cout<<vertex[j]<<" "; visited[j] = true; Q.push(j); } } }}int main(){ int a[5]={ 0,1,2,3}; //顶点数组V0,V1,V2,V3 cout<<"输入边(i,j)上的顶点"<<endl; Mgraph<int> mgraph(a,4,4); //传入顶点数组a, 顶点的个数以及边的个数 mgraph.Output(); cout<<endl<<"DFS遍历结果:"<<endl; mgraph.DFS(3); cout<<endl<<"BFS遍历结果:"; mgraph.BFS(3); return 0;}
我的测试数据:
测试的图片:
/*测试数据:0 10 22 12 3输出:0 1 1 01 0 1 01 1 0 10 0 1 0DFS遍历结果:3 2 0 1BFS遍历结果:3 2 0 1*/
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年03月25日 23时50分50秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
纯客户端页面关键字搜索高亮jQuery插件
2019-03-05
linux运维中常用的命令
2019-03-05
M1芯片的macbook安装王者荣耀,原神,崩坏方法
2019-03-05
Java温故而知新-反射机制
2019-03-05
eclipse引用sun.misc开头的类
2019-03-05
firefox中angular2嵌套发送请求问题
2019-03-05
【mybatis3】调试/断点打印日志
2019-03-05
C++
2019-03-05
[CTFSHOW]PHP特性
2019-03-05
navigator对象
2019-03-05
关于EFI系统分区(ESP)你应该知道的3件事
2019-03-05
5.Mybatis复杂映射开发
2019-03-05
Servlet2.5的增删改查功能分析与实现------删除功能(四)
2019-03-05
环境配置 jdk_mysql_myeclipse8.6
2019-03-05
Session验证码的实现(2018-7-3)
2019-03-05
spring启动错误:Could not resolve placeholder
2019-03-05
日志写入xml上传ftp遇到的问题
2019-03-05
下载任意版本vmware对应的vmware tools
2019-03-05
将 github 中他人的 仓库 导入 码云中,从而 加快下载速度的 方式
2019-03-05
Java 类加载的过程 加载、验证、准备、解析、初始化
2019-03-05