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 某省自从实行了很多年的畅通工程计划后,终于修建了很多路. ...
随机推荐
- Java基础学习总结笔记
Java基础 Java常用内存区域 栈内存空间:存储引用堆内存空间的地址 堆内存空间:保存每个对象的具体属性内容 全局数据区:保存static类型的属性 全局代码区:保存所有的方法定义 修饰符 权限修 ...
- 入门OJ:八中生成树2
题目描述 八中里面有N个建设物,M条边.对于这种要建最小生成树的问题,你应该很熟练了.现在老大决定降低某条边的费用,然后这条边必须要被选中,因为这条路他每天都要走,自然......问选了这条边后是否可 ...
- Q-Q图原理详解及Python实现
[导读]在之前的<数据挖掘概念与技术 第2章>的文章中我们介绍了Q-Q图的概念,并且通过调用现成的python函数, 画出了Q-Q图, 验证了Q-Q图的两个主要作用,1. 检验一列数据是否 ...
- 判断最长回文串——暴力、延展、Manacher
1. 暴力 时间复杂度O(n^3). 2. 延展 以某一字符为中心,设置left, right两个变量同时向外扩,判断他们指向字符是否相同.注意分奇偶讨论.时间复杂度O(n^2). 3. Manach ...
- Py其他内置函数,文件修改
其他内置函数 1.abs函数,取绝对值 print(abs(-1)) 2.all函数,判断可迭代对象是否全为真,有假直接假 假:0,'',None print(all([1,2,'1'])) prin ...
- 转 15 jmeter分布式性能测试
15 jmeter分布式性能测试 背景由于jmeter本身的瓶颈,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至还会引起Java内存溢出的错误.要解决这个问题, ...
- 前端面试之JavaScript中数组的方法!【残缺版!!】
前端面试之JavaScript中数组常用的方法 7 join Array.join()方法将数组中所有元素都转化为字符串并连接在-起,返回最后生成的字 符串.可以指定一个可选的字符串在生成的字符串中来 ...
- c++hook内联汇编模板
1 #include "Windows.h" 2 #include "tlhelp32.h" 3 #include "String.h" 4 ...
- Optimal asymmetric encryption padding 最优非对称加密填充(OAEP)
SubtleCrypto.decrypt() - Web APIs | MDN https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypt ...
- try-catch 异常捕获学习
#include <iostream> #include <string> #include <vector> #include <stdexcept> ...