C++ class实现十字链表存储的图(完整代码)

代码如下:

#include <iostream>
#include <queue>
using namespace std;
typedef int InfoType;
typedef int VertexType;
const int MaxVertexNum = 30;class ArcNode
{friend class OLGraph;friend class VertexNode;
private:int tailvertex, headvertex;ArcNode *hlink, *tlink;InfoType info;
};class VertexNode
{friend class OLGraph;
private:VertexType vertex;ArcNode *firstin, *firstout;
};class OLGraph
{
public:OLGraph() {Init_vis();};void CreateOLgraph();int  GetOut_degree(VertexType v);int  GetIn_degree(VertexType v);void Init_vis(){for (int i = 0; i < MaxVertexNum; i++) vis[i] = false;//注意是MaxVertexNum,不是vertexNum};void DFS_Node(int i);void BFS_Node(int i);void DFStraverse();void BFStraverse();int LocateVertex(VertexType v);//通过结点信息查找其序号void Visit(int v){cout << xlist[v].vertex << " ";};
private:void DFS(int  i);VertexNode xlist[MaxVertexNum];int vertexNum, edgeNum;bool vis[MaxVertexNum];
};int OLGraph::LocateVertex(VertexType v)
{for (int i = 0; i < vertexNum; i++){if (xlist[i].vertex == v) return i;}
}void OLGraph::CreateOLgraph()
{ArcNode *p;cout << "请输入顶点数和边数" << endl;cin >> vertexNum >> edgeNum;for (int i = 0; i < vertexNum; i++){cout << "请输入第" << i << "个顶点信息:" << endl;cin >> xlist[i].vertex;xlist[i].firstin = nullptr;xlist[i].firstout = nullptr;}cout << "下面输入边表信息" << endl;for (int i = 0; i < edgeNum; i++){VertexType v1, v2;//v1--->v2cout << "输入边<i,j>对应的顶点信息i,j" << endl;cin >> v1 >> v2;int p_v1 = LocateVertex(v1);int p_v2 = LocateVertex(v2);p = new ArcNode;p->tailvertex = p_v1;p->headvertex = p_v2;p->tlink = xlist[p_v1].firstout;xlist[p_v1].firstout = p;p->hlink = xlist[p_v2].firstin;xlist[p_v2].firstin = p;}
}int  OLGraph::GetOut_degree(VertexType v)
{int i = LocateVertex(v);ArcNode *p;int cnt = 0;for (p = xlist[i].firstout; p; p = p->tlink) cnt++;return cnt;
}int OLGraph::GetIn_degree(VertexType v)
{int i = LocateVertex(v);ArcNode *p;int cnt = 0;for (p = xlist[i].firstin; p; p = p->hlink) cnt++;return cnt;
}void OLGraph::DFS(int i)
{vis[i] = true;Visit(i);ArcNode *p;for (p = xlist[i].firstout; p; p = p->tlink){if (!vis[p->headvertex]){vis[p->headvertex] = true;DFS(p->headvertex);}}
}void OLGraph::DFS_Node(int i)
{DFS(i);cout << endl;Init_vis();
}void OLGraph::BFS_Node(int i)
{queue<int>q;vis[i] = true;q.push(i);ArcNode *p;while (q.size()){int t = q.front();q.pop();Visit(t);for (p = xlist[t].firstout; p; p = p->tlink){if (!vis[p->headvertex]){vis[p->headvertex] = true;q.push(p->headvertex);}}}cout << endl;Init_vis();
}void OLGraph::DFStraverse()
{for (int i = 0; i < vertexNum; i++){if (!vis[i]){vis[i] = true;DFS(i);}}cout << endl;Init_vis();
}void OLGraph::BFStraverse()
{for (int i = 0; i < vertexNum; i++){if (!vis[i]){queue<int>q;vis[i] = true;q.push(i);ArcNode *p;while (q.size()){int t = q.front();q.pop();Visit(t);for (p = xlist[t].firstout; p; p = p->tlink){if (!vis[p->headvertex]){vis[p->headvertex] = true;q.push(p->headvertex);}}}}}cout << endl;Init_vis();
}int main()
{OLGraph g;g.CreateOLgraph();cout << "bfs:" << endl;g.BFStraverse();cout << "dfs:" << endl;g.DFStraverse();VertexType  v;cin >> v;cout << "结点" << v << "的入度为:" << endl;cout<<g.GetIn_degree(v)<<endl;cout << "结点" << v << "的出度为:" << endl;cout << g.GetOut_degree(v) << endl;cin >> v;cout << "结点" << v << "的入度为:" << endl;cout << g.GetIn_degree(v) << endl;cout << "结点" << v << "的出度为:" << endl;cout << g.GetOut_degree(v) << endl;int p;cin >> p;g.BFS_Node(p);g.DFS_Node(p);return 0;
}

测试结果:
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/310650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hystrix隔离策略对比

hystrix隔离策略 zuul的隔离实现是基于hystrix实现的&#xff0c;hystrix支持线程池隔离和信号量的隔离 # 信号量隔离&#xff1a; it executes on the calling thread and concurrent requests are limited by the semaphore count --引自官网单每次调用线程&#xff0c;当…

中国速度之二神山建设(1):坚强的领导核心,“小团队大后台”组织结构 | IDCF DevOps案例研究...

内容来源&#xff1a;DevOps案例深度研究第4期 – 火神山雷神山 DevOps实践研究战队&#xff08;本文只展示部分PPT及研究成果&#xff0c;全程视频请移步文末&#xff09;本案例内容贡献者&#xff1a;赖泽薇、张扬、邓茜芸、韦一、刘德权、候利涛、冯利娟、常相宇、张力、韩丰…

通过Java编写一个服务器理解动态Web,静态Web

静态Web 说到Servlet自然就要说到Web,Web分为静态Web和动态Web&#xff0c;之前我一直都傻傻分不清两者的区别&#xff0c;直到用JAVA编写了一个服务器后才明白二者的区别&#xff0c;所谓静态Web&#xff0c;实际上就是指&#xff0c;客户端要请求的资源文件&#xff0c;服务器…

Hystrix在网关Zuul使用中遇到问题

Hystrix在网关Zuul使用中遇到问题 Zuul默认隔离策略级别是信号量隔离&#xff0c;默认最大隔离信号量是100 信号量隔离和线程隔离的区别&#xff1a;https://blog.csdn.net/liaojiamin0102/article/details/94394956默认的设置如源码&#xff1a; //在ZuulProperties 类下游…

C++ 实现无向图的最小生成树Prim算法(附完整代码)

实现Prim算法&#xff0c;需设置两个辅助一维数组lowcost和closevertex。 其中lowcost用来保存集合V-U中各顶点与集合U中各顶点构成的边中具有最小权值的边的权值&#xff1b;数组closevertex用来保存依附于该边的在集合U中的顶点。 过程: 假设初始状态时&#xff0c;U{u0}&a…

中国速度之二神山建设(2):完善的项目计划,高效能价值流 | IDCF DevOps案例研究...

内容来源&#xff1a;DevOps案例深度研究第4期 – 火神山雷神山 DevOps实践研究战队&#xff08;本文只展示部分PPT及研究成果&#xff0c;全程视频请移步文末。&#xff09;本案例内容贡献者&#xff1a;赖泽薇、张扬、邓茜芸、韦一、刘德权、候利涛、冯利娟、常相宇、张力、韩…

C++ 实现无向图的最小生成树Kruskal算法(完整代码)

按照Kruskal思想&#xff0c;n个结点的生成树有n-1条边&#xff0c;故反复上述过程&#xff0c;直到选取了n-1条边为止&#xff0c;就构成了一棵最小生成树。 实现Kruskal算法的关键问题是&#xff1a; 当一条边加入T的边集中后&#xff0c;如何判断是否构成回路。 一种解决方…

MySql 内连接,外连接查询方式区别

MySql 内连接&#xff0c;外连接查询方式 CREATE TABLE question_test (q_id int(11) DEFAULT NULL,q_name varchar(10) DEFAULT NULL,q_part varchar(10) DEFAULT NULL ) ENGINEInnoDB DEFAULT CHARSETutf8CREATE TABLE answer_test (a_id int(11) DEFAULT NULL,a_name varch…

让我的 .NET Core 博客系统支持 Docker

点击上方蓝字关注“汪宇杰博客”导语我的博客&#xff08;https://edi.wang&#xff09;所使用的博客系统 Moonglade 开源已经一年多了。目前已有至少4位社区朋友使用此系统在 Azure、阿里云上部署了自己的博客。可惜长久以来该系统一直缺乏 Docker 支持&#xff0c;而 .NET Co…

C++ 实现带权有向图的单源点最短路径Dijkstra算法(完整代码)

首先&#xff0c;引进一个辅助向量D&#xff0c;它的每个分量D[i]表示当前所找到的从始点v0到每个终点vi的最短路径的长度。 它的初态为&#xff1a;若从v0到vi有弧&#xff0c;则D[i]为弧上的权值&#xff1b;否则&#xff0c;置D[i]为∞。 显然&#xff0c;长度为 D[j]Min{…

[ASP.NET Core MVC] 如何实现运行时动态定义Controller类型?

昨天有个朋友在微信上问我一个问题&#xff1a;他希望通过动态脚本的形式实现对ASP.NET Core MVC应用的扩展&#xff0c;比如在程序运行过程中上传一段C#脚本将其中定义的Controller类型注册到应用中&#xff0c;问我是否有好解决方案。这是一个挺有意思的问题&#xff0c;我们…

C++ 实现带权有向图的每对顶点之间的最短路径Floyd算法(完整代码)

基本思想是&#xff1a; 假设求从顶点vi到vj的最短路径。 如果从vi到vj有弧&#xff0c;则从vi到vj存在一条长度为arcs[i][j]的路径&#xff0c;该路径不一定是最短路径&#xff0c;尚需进行n次试探。 首先考虑路径&#xff08;vi, v0, vj&#xff09;是否存在&#xff08;判别…

等额本息,等额本金区别

等额本金&#xff0c;等额本息区别 买房银行贷款分为两种&#xff1a; 等额本金和等额本息 等额本息 等额本息定义&#xff1a;还款本金占比逐月递增&#xff0c;利息占比逐月递减&#xff0c;月还款数不变由于每月的还款额度是一样的&#xff0c;其中每个月的还款包括了根…

【视频回放与课件】Build your AI solution with MLOps

4月8日在Global AI Community on Vitural Tour与大家分享了Build your AI solution with MLOps的专题&#xff0c;本课程主要介绍了微软Azure Machine Learning如何使用 , 以及如何通过Azure Machine Learning 结合 MLOps的概念完成机器学习项目的工作。本次Global AI Communit…

C++ 实现分块查找(顺序存储结构)(完整代码)

代码如下: #include <iostream> using namespace std; const int Maxsize 1000; const int MINNUM -999999; class Index_table {friend class SeqList; private:int key;int address; };class SeqList {//该顺序表从下标为0开始 public:~SeqList(){delete[] elem;del…

《五分钟商学院》管理篇学习笔记

【商业知识】| 作者 / Edison Zhou这是恰童鞋骚年的第213篇原创文章在商业篇中&#xff0c;主要探讨的是企业如何处理与外部&#xff08;比如客户&#xff09;的关系。而在管理篇中&#xff0c;关注的重点则是企业如何处理与内部的关系。外部的世界很精彩&#xff0c;而内部的世…

如何在.NET应用程序中分析CPU使用率过高的问题

原文来自互联网&#xff0c;由长沙DotNET技术社区编译。如译文侵犯您的署名权或版权&#xff0c;请联系小编&#xff0c;小编将在24小时内删除。限于译者的能力有限&#xff0c;个别语句翻译略显生硬&#xff0c;还请见谅。作者:胡安帕勃罗希达&#xff0c;JUAN PABLO SCIDA是一…

HashMap实现原理

HashMap HashMap基础数据结构&#xff1a; 如上结构课看出&#xff0c;HashMap主要是有一个链表的形式来存储数据 &#xff0c;上面Node类和C语言中的结构体很像&#xff0c;如上可以看出HashMap底层由是一个数组结构&#xff0c;数组中的每一项又是一个链表&#xff0c;新建一…

做好技术管理,你必须要跨越的4道槛

点击蓝字关注&#xff0c;回复“职场进阶”获取职场进阶精品资料一份读者群里有不少刚开始做管理的技术人&#xff0c;很多都和我谈过他们的困惑。总结下来主要是不知道继续晋升需要培养哪方面的能力。技术经理其实是技术人最难做好的管理岗&#xff0c;原因主要有两方面&#…

图的最小生成树和最短路径算法思路总结(Prim,Kruskal,Dijkstra,Floyd)

带权无向图—>最小生成树算法—>Prim算法: 思路: 首先&#xff0c;我们先设置两个集合&#xff0c;U_{}&#xff1a;一个用来放最小生成树的顶点&#xff0c;T_{}&#xff1a;一个用来放最小生成树的边。选取最开始的点V_0&#xff0c;将V_0放入U_{}中&#xff0c;得到U_…