描述

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

输入

多组数据,每组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

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

思路:

由于是邻接矩阵,一开始先开辟一个比较大的空间,再用0初始化矩阵。

再看题目的输出,可以发现最外一行一列就是行数和列数,所以再遍历赋值;然后是题目里的h,k,就让矩阵对应那个位置上的两个值从0变成1就行了。

新加入的那个节点和以前的点都没关系,所以只需要外围再加上以那个顶点为序号的一行一列,让行列的值都是0就可以了

#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#define MaxLen 30000
#define MaxVex 100
using namespace std;typedef struct
{int arcs[MaxVex][MaxVex];int nowvex, nowarcs;
}AMGraph;
void Create(AMGraph& amg, int vexnum, int arcnum)
{amg.nowvex = vexnum;amg.nowarcs = arcnum;if (amg.nowvex > MaxVex)exit(-1);for (int i = 0; i <= amg.nowvex; i++){amg.arcs[i][0] = i;amg.arcs[0][i] = i;}//for (int i = 0; i <= amg.nowvex; i++)//{//   for (int j = 0; j <= amg.nowvex; j++)//      cout << amg.arcs[i][j] << ' ';//  cout << endl;//}for (int i = 1; i < MaxVex; i++)for (int j = 1; j < MaxVex; j++)amg.arcs[i][j] = 0;int h, k;for (int i = 1; i <= amg.nowarcs; i++){cin >> h >> k;amg.arcs[h][k] = 1;amg.arcs[k][h] = 1;}
}
void Insert(AMGraph& amg)
{if (amg.nowvex + 1 > MaxVex)exit(-1);int p;cin >> p;amg.nowvex++;amg.arcs[0][amg.nowvex] = p;amg.arcs[amg.nowvex][0] = p;for (int i = 1; i <= amg.nowvex; i++)//4{amg.arcs[i][amg.nowvex] = 0;amg.arcs[amg.nowvex][i] = 0;}
}
void Show(AMGraph amg)
{for (int i = 0; i <= amg.nowvex; i++){for (int j = 0; j <= amg.nowvex; j++){if (j != 0)cout << ' ';cout << amg.arcs[i][j];    }cout  << endl;}
}
int main()
{int n, m;while (cin >> n >> m && m != 0 && n != 0){AMGraph amg;Create(amg, n, m);Insert(amg);Show(amg);}return 0;
}

4004-基于邻接矩阵的新顶点的增加(C++,附思路)相关推荐

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

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

  2. 4008-基于邻接矩阵的新边的增加(C++,附思路)

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

  3. 4003基于邻接表的新顶点的增加(C++,附详细解析)

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

  4. 4010-基于邻接矩阵的边的删除(C++,附思路)

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

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

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

  6. 数据结构(C++)——图:基于邻接矩阵实现的图结构

    抽象数据类型 操作接口:图支持的操作接口分为边和顶点两类 Graph模板类 typedef enum { UNDISCOVERED, DISCOVERED, VISITED } VStatus; // ...

  7. python扫雷 广度优先_基于邻接矩阵的广度优先搜索遍历(BFS)

    数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历 Time Limit: 1000MS Memory limit: 65536K 题目描述 给定一个无向连通图,顶点编号从0到n-1,用广度优先搜索( ...

  8. 【阿里内部应用】基于Blink为新商业调控打造实时大数据交互查询服务

    基于Blink为新商业调控打造实时大数据交互查询服务 案例与解决方案汇总页: 阿里云实时计算产品案例&解决方案汇总 从IT到DT.从电商到新商业,阿里巴巴的每个细胞都存在大数据的DNA,如何挖 ...

  9. chart.js x轴显示不全_机床大讲堂第67讲——基于FANUC系统的数控铣床增加第四轴的方法...

    点击蓝字,轻松关注! <制造技术与机床>杂志创刊于1951年,是我国机械工业科技期刊中创刊早.发行量大.影响面广的刊物之一,拥有广泛.专业的读者群体.本刊属中文核心期刊,中国科技论文统计用 ...

最新文章

  1. Spring Boot----监控管理
  2. Selenium学习(2) 元素定位
  3. C# 如何设置 richTextBoxr的边距
  4. VS快捷键及调试方法(含VAssistX快捷键)
  5. 群晖修改ipv6dns服务器,hiboy大佬的padavan开启IPv6,并使用IPv6登录黑群晖的方法
  6. 设计模式-结构型软件设计模式(二)
  7. python之OCR文字识别
  8. Spine 2D骨骼动画教程-完整实例入门教程
  9. EasyUI【DataGrid数据查询】
  10. 板载天线设计相关资料
  11. 【深入理解计算机系统】CSAPP-实验四:ArchLab全网最详细
  12. 【转】王阳明:耐住寂寞,守得花开
  13. 中小企业如何选择进销存软件?
  14. 论文阅读:Stroke Based Posterior Attention for Online Handwritten Mathematical Expression Recognition
  15. 解决Maven无法下载源代码包的问题
  16. 校园快递管理系统-JAVA.JSP【数据库设计、论文、源码、开题报告】
  17. Unity局域网传输图片等文件
  18. 新加坡vps和新加坡云服务器有什么区别?
  19. 零编程基础获取最新、最权威的县以上行政区划代码信息
  20. 字节跳动软件测试岗,前两面过了,第三面HR天坑

热门文章

  1. Java基础---数据类型转换和运算符
  2. 小程序中 swiper设置圆角在真机上不显示问题
  3. python读excel
  4. web自动化测试第12步:selenium中下拉框的解决方法(Select)
  5. php二维数组排序方法(array_multisort usort)
  6. HDU-4618 Palindrome Sub-Array 暴力枚举
  7. war,jar包是啥
  8. 嵌入式根文件系统的移植和制作详解
  9. C#中 类和结构 值类型和引用类型以及 值传递和引用传递
  10. 创业期的软件开发管理(一)