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 某省自从实行了很多年的畅通工程计划后,终于修建了很多路. ...
随机推荐
- C++ 异常机制(上)
目录 一.概念 二.异常的好处 三.基本语法 四.栈解旋 五.异常接口声明 六.异常对象的内存模型 七.异常对象的生命周期 一.概念 异常:存在于运行时的反常行为,这些行为超过了函数的正常的功能范围. ...
- 根据业务摸索出的一个selenium代码模版(python)
前言 总算入行上班几个月了,不得不说业务是真的不消停啊.. 本人工作上经常遇到一种场景:为甲方做自动化接口处理工具,登录需要短信验证码,, 嘛算是摸索出了一套selenium代码模板,主要解决如下痛点 ...
- 关于spring-data与elasticsearch的使用,自定义repository
之前没有使用过spring-data,关于spring-data有很多很棒的设计,例如仅仅只需要声明一个接口就行,你甚至都不需要去实现,spring-data有内置默认的实现类,基本就上完成绝大多数对 ...
- 【windows】快捷键
Ctrl+字母键 1.Ctrl+A:全选 2.Ctrl+C:复制选择的项目 3.Ctrl+E:选择搜索框 4.Ctrl+F:选择搜索框 5.Ctrl+N:创建新的项目 6.Ctrl+W:关闭当前窗口 ...
- 【ORA】ORA-00257 archiver error. 错误的处理方法
今天连接数据库,结果报错,ora-00257查看 [oracle@exam oracle]$ oerr ora 00257 00257, 00000, "archiver error. Co ...
- 数据分析——Numpy/pandas
NumPy NumPy是高性能科学计算和数据分析的基础包.部分功能如下: ndarray, 具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组. 用于对整组数据进行快速运算的标准数学函数(无需编 ...
- 每月一更的《HelloGitHub》第 58 期,来啦!
HelloGitHub 分享 GitHub 上有趣.入门级的开源项目.欢迎大家: 贡献代码 宣传你觉得优秀的项目 Star 项目️ 本月刊是每月 28 号更新,再见月刊就是年后了.在这里提前祝大家:新 ...
- 免安装的tomcat转服务
一:确保tomcat 在点击bin\startup 文件可以正常启动访问: 二:本机安装有JDK: 三:本机环境变量配置:JAVA_HOME:C:\Java\jdk1.7.0_17; 四:本机Tomc ...
- 多线程c++11编程题目
/*题目:子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次. 如此循环50次,试写出代码.子线程与主线程必有一个满足条件(flag ...
- 引入 Gateway 网关,这些坑一定要学会避开!!!
Spring cloud gateway是替代zuul的网关产品,基于Spring 5.Spring boot 2.0以上.Reactor, 提供任意的路由匹配和断言.过滤功能.上一篇文章谈了一下Ga ...