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 某省自从实行了很多年的畅通工程计划后,终于修建了很多路. ...
随机推荐
- 行业动态 | 利用Cassandra数据库揭开家族祖先的秘密
FamilySearch选择了基于Apache Cassandra的DataStax Enterprise (DSE)来加速用户增长,并通过更快的反应时间.高可用性以及零数据库宕机来提供强大的 ...
- 基于Python开发数据宽表实例
搭建宽表作用,就是为了让业务部门的数据分析人员,在日常工作可以直接提取所需指标,快速做出对应专题的数据分析.在实际工作中,数据量及数据源繁多,如果每个数据分析人员都从计算加工到出报告,除了工作效率巨慢 ...
- dig的安装和使用
-bash: dig: command not found 解决办法: yum -y install bind-utils dig www.baid bu.com 查看a记录 dig www.ba ...
- 【Oracle】查询执行慢的sql
查询执行最慢的sql select * from (select sa.SQL_TEXT, sa.SQL_FULLTEXT, sa.EXECUTIONS "执行次数", round ...
- Databricks 第7篇:管理Secret
有时,访问数据要求您通过JDBC对外部数据源进行身份验证,可以使用Azure Databricks Secret来存储凭据,并在notebook和job中引用它们,而不是直接在notebook中输入凭 ...
- CMOS 摄像头的Skipping 和 Binning 模式
在通常的摄像头中,不同的resolution对应不同的帧率.想要提高帧率就要考虑是否需要缩小视野(FOV).若不希望视野缩小,就需要减少resolution. 常用的减少resolution的两种方式 ...
- Redisson 分布式锁实战与 watch dog 机制解读
Redisson 分布式锁实战与 watch dog 机制解读 目录 Redisson 分布式锁实战与 watch dog 机制解读 背景 普通的 Redis 分布式锁的缺陷 Redisson 提供的 ...
- OO第三次总结博客
规格化设计的发展历史 (因为很难寻找,所以参考了下别的同学的调研结果) 规格化设计与结构化.模块化设计密不可分,伴随着OOP语言的发展,规格化设计思想逐渐形成体系,慢慢完善. 20世纪60年代,程序的 ...
- IE浏览器的卸载操作
1.首先进入打开这个 C:\Windows\TEMP\ 文件夹,将里面的所有文件都清空了. 2.依次点击"开始"-"所有程序"-"附件",右 ...
- 浅析Linux进程空间布局
一.进程空间分布概述 对于一个进程,其空间分布如下图所示: 1.参数说明 程序段(Text):程序代码在内存中的映射,存放函数体的二进制代码. 初始化过的数据(Data):在程序运行初已经对变量进行初 ...