描述

给定一个无向图,在此无向图中增加一个新顶点。

输入

多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。顶点编号为1到n。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有一个数字f,代表新插入的顶点编号。当n和m都等于0时,输入结束

输出

每组数据输出n+1行。为增加顶点后的邻接表。每两个数字之间用空格隔开。

输入样例 1

3 2
1 2
2 3
4
2 1
1 2
4
0 0

输出样例 1

1 2
2 3 1
3 2
4
1 2
2 1
4

这是邻接表的第一道题,从这道题练起,慢慢熟悉邻接表的使用机制吧(ง • v •)ง~

思路:

邻接表就是所有的表头(顶点)在一个大的数组里顺序排列,表里的每一个元素都是一个链表节点,它们又各自分别指向与自己相邻的节点,就像是一栋大楼,从上到下每一层的窗户里都伸出不同的花枝来一样~是不是很形象呢~

看ppt上的示例代码感觉那个数组开得太大了,实际生活中不方便,所以想改良一下能不能结合题意弄一个长度可变,或者是不一下开这么大的数组,然后想到了线性表那一章里面用一个int*指针,在创建顺序表的时候才new一个已知大小的数组的思路,于是决定采用那个思路。

重点:区分好普通节点LNode和指向节点的指针linklist

由题意,邻接表从1开始算,所以要能使用下标为n的区域,并且后来又插了一个新节点,所以一共要开辟[n+2]这么大的数组,因为VList是linklist类型(指针类型),所以它的new是new一个LNode类型(可以简记为new是比当前“低”一个等级的)

之后遍历那个数组,初始化每个点的序号以及指向NULL。

h,k那里,linklist p,q之后,别忘了要=new LNode就是头插法了,不然那么多节点都要弄尾节点还要取好名字不可能的。。

之后在n+1位输入新插入的节点,它是孤立点,所以指向NULL就可以了

Show的时候也用指针的方式,对“大楼”里的每层都建立一个指针,然后遍历输出就可以了,注意输出格式,另外由于是用p->next作为判断条件,别忘了手动输出最后一个节点的vex~

#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
using namespace std;typedef struct LNode
{int vex;struct LNode* next;
}*linklist, LNode;
typedef struct Sheet
{LNode *VList;int vexnum;int arcnum;
}ALGragh;
void Create(ALGragh& alg, int n, int m)
{alg.vexnum = n;alg.arcnum = m;alg.VList = new LNode[n+2];for (int i = 1; i <= n; i++){alg.VList[i].vex = i;alg.VList[i].next = NULL;}int h, k;for (int i = 0; i < m; i++){cin >> h >> k;linklist p=new LNode, q=new LNode;p->vex = h;p->next = alg.VList[k].next;q->vex = k;q->next = alg.VList[h].next;alg.VList[h].next = q;alg.VList[k].next = p;}int p;cin >> p;alg.VList[n + 1].vex = p;alg.VList[n + 1].next = NULL;
}
void Show(ALGragh alg,int n)
{for (int i = 1; i <= n + 1; i++){linklist p = &alg.VList[i];while (p->next){cout << p->vex;if (p->next)cout << ' ';p = p->next;}cout <<p->vex<< endl;}
}
int main()
{int m, n;while (cin >> n >> m && m != 0 && n != 0){ALGragh a;Create(a, n, m);Show(a, n);}return 0;
}

4003基于邻接表的新顶点的增加(C++,附详细解析)相关推荐

  1. 4007-基于邻接表的新边的增加(C++,附思路)

    描述 给定一个无向图,在此无向图中增加一条边. 输入 多组数据,每组m+2行.第一行有两个数字n和m,代表有n个顶点和m条边.顶点编号为1到n.第二行到第m+1行每行有两个数字h和k,代表边依附的两个 ...

  2. 4005基于邻接表的顶点的删除(C++,附思路)

    描述 给定一个无向图,在此无向图中删除一个顶点. 输入 多组数据,每组m+2行.第一行有两个数字n和m,代表有n个顶点和m条边.顶点编号为1到n.第二行到第m+1行每行有两个数字h和k,代表边依附的两 ...

  3. 4014基于邻接表的长度为k的简单路径的求解

    描述 一个连通图采用邻接表作为存储结构.设计一个算法,判断无向图中任意给定的两点是否存在一条长度为k的简单路径. 输入 多组数据,每组m+3数据行.第一行有两个数字n,m和k,代表有n个顶点,m条边和 ...

  4. C++笔记-基于邻接表的BFS(宽度优先遍历)

    这里是基于邻接表的,有向的,具体代码如下: #include <iostream> #include <list>using namespace std;class Graph ...

  5. SDUT 2142 数据结构实验之图论二:基于邻接表的广度优先搜索遍历

    数据结构实验之图论二:基于邻接表的广度优先搜索遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Descript ...

  6. 【 第11关:基于邻接表的深度优先遍历】【编程题实训-图】【头歌】【bjfu-282】

    任务描述 一个连通图采用邻接表作为存储结构.设计一个算法,实现从顶点v出发的深度优先遍历的非递归过程. 编程要求 输入 多组数据,每组m+2数据行.第一行有两个数字n和m,代表有n个顶点和m条边.顶点 ...

  7. 《新武林传奇》大侠能力详细解析

    为什么80%的码农都做不了架构师?>>>    在国内首款武侠消除游戏<新武林传奇>中,想要成功闯荡江湖称霸武林,自然不能缺少极品大侠的协助.那么如何才能判断一位大侠是否 ...

  8. 数据结构实验之图论二:基于邻接表的广度优先搜索遍历

    题目描述 给定一个无向连通图,顶点编号从0到n-1,用广度优先搜索(BFS)遍历,输出从某个顶点出发的遍历序列.(同一个结点的同层邻接点,节点编号小的优先遍历) 输入 输入第一行为整数n(0< ...

  9. 4004-基于邻接矩阵的新顶点的增加(C++,附思路)

    描述 给定一个无向图,在此无向图中增加一个新顶点. 输入 多组数据,每组m+2行.第一行有两个数字n和m,代表有n个顶点和m条边.顶点编号为1到n.第二行到第m+1行每行有两个数字h和k,代表边依附的 ...

最新文章

  1. Docker容器管理总结
  2. 《算法入门经典大赛——培训指南》第二章考试
  3. hdu4561 bjfu1270 最大子段积
  4. Java设计模式学习总结(12)——结构型模式之外观模式
  5. 【人工智能沙龙】未来,语音识别可能应用于哪些商业化场景?
  6. Rabbit MQ 安装
  7. 网页设计css入门,网页设计基础:Div+CSS布局入门教程
  8. 怎么样建立局域网?一般局域网需要几台电脑才可以?
  9. 红蓝眼睛(答案在文章中找)
  10. SolidWorks 部分插件不显示
  11. SSMS安装失败及解决
  12. 用正则表达式提取歌词LRC中的歌词
  13. 阿里云网站备案注销新规则
  14. 算法学习笔记之滑动平均滤波算法
  15. 通过调用Exiftool可以提取文件名的信息, 设置媒体文件的TagInfo相关信息
  16. 高性能网站建设指南-前端性能优化(一)
  17. oracle19c只使用pdb模式,oracle 19c CDB vs pdb 创建
  18. 616微盟零售购物节开办:全链路智慧增长开拓B端思维边界
  19. 基于MATLAB的Alexnet迁移学习进行猫狗分类(数据集:Kaggle)
  20. 半年多过去了,还记得影响力是怎么炼成的?

热门文章

  1. 多线程十 Timer
  2. easyui input输入框的限制和校验条件
  3. 再谈布局,栅栏式自适应布局的学习和实现(calc自适应布局)
  4. Codeforces Round #346 (Div. 2) D. Bicycle Race 叉积
  5. java窗体与Flash交互
  6. [转]SUID和SGID
  7. Android音乐播放器高级开发
  8. java基础——“”equals“”与 “”==“” 的区别
  9. Mr.J-- jQuery学习笔记(八)--CSS样式操作
  10. 递归:我不用栈 非递归:栈使我快乐