C++实现邻接表
对于无向图(V0,V1),(V1,V2),(V2,V3),(V0,V2)对应的邻接表表示就是
在代码中,你要单独对V1、V2、V3创建一种结构体类型。在对后面的节点0,1,2,3创建一种结构体类型
代码:
1 #include <iostream>
2 #include<stdio.h>
3 #define VERTEX 4
4 using namespace std;
5 // 边表结点
6 typedef struct edgenode
7 {
8 int adjvex;
9 struct edgenode *next;
10 } Node;
11 // 顶点表结点
12 typedef struct adjlist
13 {
14 int vex;
15 Node *link;
16 } VertexNode, AdjList[VERTEX];
17 // 图
18 typedef struct
19 {
20 int n, e;
21 AdjList adj;
22
23 } AdjGraph;
24 // 创建图
25 void createAdjGraph(AdjGraph &g)
26 {
27 int cnt;
28 printf("输入节点数量和边数量\n");
29 scanf("%d%d",&g.n,&g.e);
30 for(int i=1;i<=g.n;++i)
31 g.adj[i].link=NULL;
32 cnt=g.e;
33 Node *p1;
34 printf("输入每一条边\n");
35 while(cnt--)
36 {
37
38 int x,y;
39 scanf("%d%d",&x,&y);
40
41 p1=new Node;
42 p1->adjvex=y;
43 p1->next=g.adj[x].link;
44 g.adj[x].link=p1;
45
46 swap(x,y);
47
48 p1=new Node;
49 p1->adjvex=y;
50 p1->next=g.adj[x].link;
51 g.adj[x].link=p1;
52 }
53 }
54 // 求图中顶点的出度
55 void outDegree(AdjGraph g,int i)
56 {
57 Node *p;
58 int outD;
59 outD = 0;
60 p = g.adj[i].link;
61 while(NULL != p)
62 {
63 //printf("**\n");
64 outD++;//printf("%d\n",p->adjvex);
65 p = p->next;
66
67 }
68 cout << "顶点" << i << "的出度为:" << outD << endl;
69 }
70
71 void del(AdjGraph g)
72 {
73 int x,y;
74 Node *p1=NULL,*p2=NULL;
75 scanf("%d%d",&x,&y);
76 p1=g.adj[x].link;
77 while(p1!=NULL && p1->adjvex!=y)
78 {
79 //printf("%d\n",p1->next->adjvex);
80 p1=p1->next;
81 }
82 //if(p1->next==NULL) printf("*****\n");
83 if(p1!=NULL && p1->adjvex==y)
84 {
85 //printf("***\n");
86 p2=p1;
87 p1=p1->next;
88 if(p1->next!=NULL)
89 p2->next=p1->next;
90 else p2->next=NULL;
91 }
92
93 swap(x,y);
94
95 p1=g.adj[x].link;
96 while(p1!=NULL && p1->adjvex!=y)
97 {
98 p1=p1->next;
99 }
100 if(p1!=NULL && p1->adjvex==y)
101 {
102 //printf("**\n");
103 p2=p1;
104 p1=p1->next;
105 if(p1->next!=NULL)
106 p2->next=p1->next;
107 else p2->next=NULL;
108 }
109 }
110 int main()
111 {
112 AdjGraph g;
113 createAdjGraph(g);
114 int i;
115 printf("输入要删除的边\n");
116 //scanf("%d",&i);
117 del(g);
118 outDegree(g,2);// 打印出度
119 return 0;
120 }
C++实现邻接表的更多相关文章
- 邻接表的广度优先遍历(java版)
到 0 的权是 91 到 2 的权是 31 到 3 的权是 61 到 4 的权是 7 2 到 0 的权是 22 到 3 的权是 5 3 到 0 的权是 33 到 4 的权是 1 4 到 2 的权是 2 ...
- 06-图1 列出连通集 (25分)(C语言邻接表实现)
题目地址:https://pta.patest.cn/pta/test/558/exam/4/question/9495 由于边数E<(n*(n-1))/2 所以我选用了邻接表实现,优先队列用循 ...
- 邻接表有向图(三)之 Java详解
前面分别介绍了邻接表有向图的C和C++实现,本文通过Java实现邻接表有向图. 目录 1. 邻接表有向图的介绍 2. 邻接表有向图的代码说明 3. 邻接表有向图的完整源码 转载请注明出处:http:/ ...
- 邻接表有向图(二)之 C++详解
本章是通过C++实现邻接表有向图. 目录 1. 邻接表有向图的介绍 2. 邻接表有向图的代码说明 3. 邻接表有向图的完整源码 转载请注明出处:http://www.cnblogs.com/skywa ...
- 邻接表有向图(一)之 C语言详解
本章介绍邻接表有向图.在"图的理论基础"中已经对图进行了理论介绍,这里就不再对图的概念进行重复说明了.和以往一样,本文会先给出C语言的实现:后续再分别给出C++和Java版本的实现 ...
- 邻接表无向图(三)之 Java详解
前面分别介绍了邻接表无向图的C和C++实现,本文通过Java实现邻接表无向图. 目录 1. 邻接表无向图的介绍 2. 邻接表无向图的代码说明 3. 邻接表无向图的完整源码 转载请注明出处:http:/ ...
- 邻接表无向图(二)之 C++详解
本章是通过C++实现邻接表无向图. 目录 1. 邻接表无向图的介绍 2. 邻接表无向图的代码说明 3. 邻接表无向图的完整源码 转载请注明出处:http://www.cnblogs.com/skywa ...
- 邻接表无向图(一)之 C语言详解
本章介绍邻接表无向图.在"图的理论基础"中已经对图进行了理论介绍,这里就不再对图的概念进行重复说明了.和以往一样,本文会先给出C语言的实现:后续再分别给出C++和Java版本的实现 ...
- poj3013 邻接表+优先队列+Dij
把我坑到死的题 开始开题以为是全图连通是的最小值 ,以为是最小生成树,然后敲了发现不是,看了下别人的题意,然后懂了: 然后发现数据大,要用邻接表就去学了一下邻接表,然后又去学了下优先队列优化的dij: ...
- HDU 1874 畅通工程续(最短路/spfa Dijkstra 邻接矩阵+邻接表)
题目链接: 传送门 畅通工程续 Time Limit: 1000MS Memory Limit: 65536K Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路. ...
随机推荐
- (二)数据源处理6-excel数据转换实战(下)
将结果的所有数据整理如下: {'api_case_01': [{'测试用例编号': 'api_case_01', '测试用例名称': '获取access_token接口测试', '用例执行': '是' ...
- 【Java】网络编程之NIO
简单记录 慕课网-解锁网络编程之NIO的前世今生 & 一站式学习Java网络编程 全面理解BIO/NIO/AIO 内容概览 文章目录 1.[了解] NIO网络编程模型 1.1.NIO简介 1. ...
- kubernets之服务的实现方式
一 服务如何通过kubernetes集群的组件来实现其功能 1.1 节点上的所有的服务相关的功能实现都是通过节点上面的kube-proxy来实现的,服务提供了一个或者多个服务IP以及端口对客户端开 ...
- 分布式 ID 生成算法 — SnowFlake
一.概述 分布式 ID 生成算法的有很多种,Twitter 的 SnowFlake 就是其中经典的一种. SnowFlake 算法生成 ID 的结果是一个 64bit 大小的整数,它的结构如下图: 1 ...
- linux7下修改主机名的方式
在基于linux发行版的众多linux kernel 3.0以上,包括rhel7,centos7等提供多种修改linux主机名的方式 1.通过编辑/etc/hostname文件 2.命令hostnam ...
- 【源码解读】js原生消息提示插件
效果如下: 关闭message后前后message的衔接非常丝滑,这部分是我比较感兴趣的.带着这个问题先了解下DOM结构,顺便整理下作者的思路. 从DOM里我们可以看到所有的message都在一个容器 ...
- 从零开始学spring源码之ioc预热:bean的拓展和beanProcessor注册
上篇聊完了bean的解析,说起来做的事情很简单,把xml文件里面配置的标签全部解析到spring容器里面,但是spring做的时候,花了那么大代价去做,后面看看到底值不值得呢. 接下来看看prepar ...
- 全栈性能测试修炼宝典-JMeter实战笔记(二)
性能测试初体验 性能测试实质:利用工具去模拟大量用户操作来验证系统能够承受的负载情况,找出潜在的性能问题,分析并解决:找出系统性能变化趋势,为后续的扩展提供参考 测试分类 测试内容中,负载测试.压力测 ...
- Centos 安装postgreSQL9.4.3
rpm -ivh http://download.postgresql.org/pub/repos/yum/9.4/redhat/rhel-7.2-x86_64/pgdg-centos94-9.4-3 ...
- CKafka 架构原理
消息队列 CKafka 技术原理 - 产品简介 - 文档中心 - 腾讯云 https://cloud.tencent.com/document/product/597/10067 消息队列 CKafk ...