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 某省自从实行了很多年的畅通工程计划后,终于修建了很多路. ...
随机推荐
- 从一次生产消费者的bug看看线程池如何增加线程
0 背景 某个闲来无事的下午,看到旧有的项目中,有个任务调度的地方都是同步的操作,就是流程A的完成依赖流程B,流程B的完成依赖流程C,按此类推. 作为一名垃圾代码生产者,QA的噩梦.故障报告枪手的我来 ...
- Upload - Labs (下)
Pass - 11: 1.查看源代码,发现进行了一次对后缀名替换成空格,因此考虑双写绕过, 2.上传成功, 关键代码: $is_upload = false; $msg = null; if (iss ...
- web dynpro配置注意事项
如果你想使用web dynpro 开发的应用,但是发现浏览器报错,那么你按照下面的步骤逐一进行检查吧.特别是返回的500错误,或者是你发现浏览器的地址栏中以http://<hostname> ...
- SAP client锁定
今天发现一个函数可以锁定SAP CLIENT . SCCR_LOCK_CLIENT 参数是client号码. 还可以通过事物SU10批量锁定用户登陆client
- SYSTEM_SHMCONSTR_LOGON_FAILED错误解决办法
如果你在调用WebDynpro程序时,发现st22里有如上图所示的报错信息,可以参考note:1318269所列举的方法来进行处理.大概的方法就是,通过SE80,执行任意的webdypro程序,例如& ...
- ASP.NET Core错误处理中间件[4]: 响应状态码页面
StatusCodePagesMiddleware中间件与ExceptionHandlerMiddleware中间件类似,它们都是在后续请求处理过程中"出错"的情况下利用一个错误处 ...
- GlusterFS分布式存储系统复制集更换故障Brick操作记录
场景: GlusterFS 3节点的复制集,由于磁盘故障,其中一个复制集需要重装系统,所以需要重装glusterfs并将该节点加入glusterfs集群 一. 安装GlusterFS 首先在重装系统节 ...
- C++ 无法打开 源 文件 "ntddk.h"
原因是SDK版本太高了,或者版本不对应WDK,换一个SDK版本就好了.
- Linux kernel 同步机制
Linux kernel同步机制(上篇) https://mp.weixin.qq.com/s/mosYi_W-Rp1-HgdtxUqSEgLinux kernel 同步机制(下篇) https:// ...
- Sapphire: Copying GC Without Stopping the World
https://people.cs.umass.edu/~moss/papers/jgrande-2001-sapphire.pdf Many concurrent garbage collectio ...