定义邻接矩阵存储的图类。
[实验要求]

1. 创建一个邻接矩阵存储的图;
2. 返回图中指定边的权值;
3. 查找图中某顶点的第一个邻接顶点、某顶点关于另一个顶点的下一个邻接顶点序号;
4. 图的深度优先遍历;

[截图]

1. 实验例图

2.操作截图

[实现代码]
一共有三个文件Graph_Martix.h、Graph_Martix.cpp和main.cpp

- Graph_Martix.h

  1. #ifndef _GRAPH_MARTIX_H
  2. #define _GRAPH_MARTIX_H
  3. #include <iostream>
  4. using namespace std;
  5. const int MaxGrzphSize=; //图的最大顶点个数
  6. const int MaxWeight=; //图中允许的最大权值
  7. class Graph_Martix
  8. {
  9. private:
  10. int edge[][];
  11. int graphsize;
  12. public:
  13. Graph_Martix();
  14. int GetWeight(const int v1,const int v2);
  15. int GetFirstNeighbor(const int v);
  16. void GetAllNeighbor(const int v);
  17. int GetNextNeighbor(const int v1,const int v2);
  18. void DepthFirstSearch(int v);
  19. void RDFS(const int v,int *visited);
  20.  
  21. };
  22. #endif

- Graph_Martix.cpp

  1. #include "Graph_Martix.h"
  2. Graph_Martix::Graph_Martix() {
  3. cout<<"请输入邻接矩阵节点个数"<<endl;
  4. cin>>graphsize;
  5. cout<<"请输入各个节点之间的权值:"<<endl;
  6. for(int i=;i<graphsize;i++){
  7. for(int j=;j<graphsize;j++){
  8. cin>>edge[i][j];
  9. }
  10. }
  11. }
  12. int Graph_Martix::GetWeight(const int v1,const int v2){
  13. if(v1==-||v2==-)
  14. return -;
  15. else
  16. return edge[v1][v2];
  17. }
  18. int Graph_Martix::GetFirstNeighbor(const int v){
  19. if (v==-) return -;
  20. for(int i=;i<graphsize;i++){
  21. if(edge[v][i]>&&edge[v][i]<MaxWeight)
  22. return i;
  23. }
  24. return -;//若v没有邻接顶点,则返回-1.
  25. }
  26. void Graph_Martix::GetAllNeighbor(const int v) {
  27. if(v==-) return;
  28. for(int i=;i<graphsize;i++){
  29. if(edge[v][i]>&&edge[v][i]<MaxWeight){
  30. cout<<i;
  31. }
  32. }
  33. }
  34. int Graph_Martix::GetNextNeighbor(const int v1,const int v2) {
  35. if(v1==-||v2==-) return -;
  36. for(int i=v2+;i<graphsize;i++)
  37. if(edge[v1][i]>&&edge[v1][i]<MaxWeight)
  38. return i;
  39. return -; //若在v2之后没有与v1邻接的顶点,则返回-1.
  40. }
  41. void Graph_Martix::RDFS(const int v,int *visited)
  42. {
  43. cout<<v<<" "; //输出v的序号
  44. visited[v]=; //说明v已被访问过
  45. int w=GetFirstNeighbor(v); //取得v的第一个邻接顶点的序号
  46. while(w!=-) //若存在顶点w
  47. {
  48. if(!visited[w]) //若w未被访问过,从w递归访问
  49. RDFS(w,visited);
  50. w=GetNextNeighbor(v,w); //w为v关于w的下一个邻接顶点
  51. }
  52. }
  53. void Graph_Martix::DepthFirstSearch(int v)
  54. {
  55. int *visited=new int[graphsize]; //为辅助数组申请空间
  56. for(int k=;k<graphsize;k++)
  57. visited[k]=;
  58. RDFS(v,visited); //从序号为0的节点出发,深度优先遍历
  59. delete[]visited; //释放辅助数组空间
  60. }

- main.cpp

  1. #include <iostream>
  2. #include "Graph_Martix.h"
  3. #include "Graph_Martix.cpp"
  4. using namespace std;
  5. int main(){
  6. Graph_Martix a;
  7. int b,c,d,e,f,g;
  8. while(){
  9. cout<<"请输入要执行的操作"<<endl;
  10. cout<<"0.退出"<<endl;
  11. cout<<"1.获取指定权值"<<endl;
  12. cout<<"2.获取该点全部邻接顶点"<<endl;
  13. cout<<"3.深度遍历"<<endl;
  14. cin>>c;
  15. switch(c){
  16. case :
  17. exit();
  18. break;
  19. case :
  20. cout<<"请输入该边的起点,终点"<<endl;
  21. cin>>d>>e;
  22. b=a.GetWeight(d,e);
  23. if(b==-){
  24. cout<<"边不存在"<<endl;
  25. }
  26. cout<<b<<endl;
  27. break;
  28. case :
  29. cout<<"请输入顶点序号"<<endl;
  30. cin>>f;
  31. a.GetAllNeighbor(f);
  32. break;
  33. case :
  34. cout<<"请输入选择哪个顶点开始深度遍历"<<endl;
  35. cin>>g;
  36. a.DepthFirstSearch(g);
  37. cout<<endl;
  38. break;}}
  39. return ;
  40. }

数据结构C++实现邻接矩阵存储图的更多相关文章

  1. PTA 邻接矩阵存储图的深度优先遍历

    6-1 邻接矩阵存储图的深度优先遍历(20 分) 试实现邻接矩阵存储图的深度优先遍历. 函数接口定义: void DFS( MGraph Graph, Vertex V, void (*Visit)( ...

  2. 数据结构(11) -- 邻接表存储图的DFS和BFS

    /////////////////////////////////////////////////////////////// //图的邻接表表示法以及DFS和BFS //////////////// ...

  3. 数据结构与算法之PHP用邻接表、邻接矩阵实现图的广度优先遍历(BFS)

    一.基本思想 1)从图中的某个顶点V出发访问并记录: 2)依次访问V的所有邻接顶点: 3)分别从这些邻接点出发,依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到. 4) ...

  4. 数据结构之---C语言实现图的邻接表存储表示

    // 图的数组(邻接矩阵)存储表示 #include <stdio.h> #include <stdlib.h> #include <string.h> #defi ...

  5. 图的bfs遍历模板(邻接矩阵存储和邻接表存储)

    bfs遍历图模板伪代码: bfs(u){ //遍历u所在的连通块 queue q; //将u入队 inq[u] = true; while (q非空){ //取出q的队首元素u进行访问 for (从u ...

  6. 邻接矩阵实现图的存储,DFS,BFS遍历

    图的遍历一般由两者方式:深度优先搜索(DFS),广度优先搜索(BFS),深度优先就是先访问完最深层次的数据元素,而BFS其实就是层次遍历,每一层每一层的遍历. 1.深度优先搜索(DFS) 我一贯习惯有 ...

  7. 数据结构Java版之邻接矩阵实现图(十一)

    邻接矩阵实现图,是用一个矩阵,把矩阵下标作为一个顶点,如果顶点与顶点之间有边.那么在矩阵对应的点上把值设为 1 .(默认是0) package mygraph; import java.util.Li ...

  8. java数据结构_笔记(4)_图

    图一.概念.图: 是一种复杂的非线性数据结构.图的二元组定义: 图 G 由两个集合 V 和 E 组成,记为:G=(V, E)  其中: V 是顶点的有穷非空集合,E 是 V 中顶点偶对(称为边)的有穷 ...

  9. c++邻接表存储图(无向),并用广度优先和深度优先遍历(实验)

    一开始我是用c写的,后面才发现广搜要用到队列,所以我就直接使用c++的STL队列来写, 因为不想再写多一个队列了.这次实验写了两个多钟,因为要边写边思考,太菜了哈哈. 主要参考<大话数据结构&g ...

随机推荐

  1. 机器学习 | SVD矩阵分解算法,对矩阵做拆分,然后呢?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题第28篇文章,我们来聊聊SVD算法. SVD的英文全称是Singular Value Decomposition,翻译过来 ...

  2. mybatis的<if>标签,<foreach>标签,<collection>标签,<association>标签以及useGeneratedKeys用法

    <if>标签 1.判断非空或不等于 <if test="assessTypes!= null and assessTypes!='' "> AND FIND ...

  3. vue 表格使用el-select

    <el-table-column label="示例" width="210" align="center"> <temp ...

  4. smartJQueryZoom(smartZoom) 的使用方法

    smartZoom 是一个我很喜欢用的库. 但是这个库有一些不完善的地方. 比如BUG. 比如使用上可能遇到的问题. <article> <div id="zoom_box ...

  5. JAVA集合二:HashMap和Hashtable

    参考链接: HOW2J.CN HashMap HashMap实现了JAVA的Map接口,类似于C++的STL框架的Map,是存储键值对的数据结构.键(key)是唯一的,但值(value)可以重复,如果 ...

  6. python numpy库np.percentile用法说明

    在python中计算一个多维数组的任意百分比分位数,此处的百分位是从小到大排列,只需用np.percentile即可…… a = range(1,101) #求取a数列第90%分位的数值 np.per ...

  7. 05 . ELK Stack+Redis日志收集平台

    环境清单 IP hostname 软件 配置要求 网络 备注 192.168.43.176 ES/数据存储 elasticsearch-7.2 内存2GB/硬盘40GB Nat,内网 192.168. ...

  8. jenkins集群(二)(master --> slave) -- allure自动化测试报告部署

    一.前提 1.环境 1)已经部署好了jenkins环境,包括jenkins的“全局工具配置”也配好了. 2.master与slave的简单的概念 1)master:jenkins部署所在的机器 2)s ...

  9. ⛅剑指 Offer 11. 旋转数组的最小数字

    20207.22 LeetCode 剑指 Offer 11. 旋转数组的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小 ...

  10. express中post请求模块

    body-parser模块主要解析post接口请求 1.npm install  body-parser  -S 2.server.js中引用 const bodyParser=require('bo ...