4004-基于邻接矩阵的新顶点的增加(C++,附思路)
描述
给定一个无向图,在此无向图中增加一个新顶点。
输入
多组数据,每组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++,附思路)相关推荐
- 4005基于邻接表的顶点的删除(C++,附思路)
描述 给定一个无向图,在此无向图中删除一个顶点. 输入 多组数据,每组m+2行.第一行有两个数字n和m,代表有n个顶点和m条边.顶点编号为1到n.第二行到第m+1行每行有两个数字h和k,代表边依附的两 ...
- 4008-基于邻接矩阵的新边的增加(C++,附思路)
描述 给定一个无向图,在此无向图中增加一条边. 输入 多组数据,每组m+2行.第一行有两个数字n和m,代表有n个顶点和m条边.顶点编号为1到n.第二行到第m+1行每行有两个数字h和k,代表边依附的两个 ...
- 4003基于邻接表的新顶点的增加(C++,附详细解析)
描述 给定一个无向图,在此无向图中增加一个新顶点. 输入 多组数据,每组m+2行.第一行有两个数字n和m,代表有n个顶点和m条边.顶点编号为1到n.第二行到第m+1行每行有两个数字h和k,代表边依附的 ...
- 4010-基于邻接矩阵的边的删除(C++,附思路)
描述 给定一个无向图,在此无向图中删除一条边.(题目写错字了) 输入 多组数据,每组m+2行.第一行有两个数字n和m,代表有n个顶点和m条边.顶点编号为1到n.第二行到第m+1行每行有两个数字h和k, ...
- 4007-基于邻接表的新边的增加(C++,附思路)
描述 给定一个无向图,在此无向图中增加一条边. 输入 多组数据,每组m+2行.第一行有两个数字n和m,代表有n个顶点和m条边.顶点编号为1到n.第二行到第m+1行每行有两个数字h和k,代表边依附的两个 ...
- 数据结构(C++)——图:基于邻接矩阵实现的图结构
抽象数据类型 操作接口:图支持的操作接口分为边和顶点两类 Graph模板类 typedef enum { UNDISCOVERED, DISCOVERED, VISITED } VStatus; // ...
- python扫雷 广度优先_基于邻接矩阵的广度优先搜索遍历(BFS)
数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历 Time Limit: 1000MS Memory limit: 65536K 题目描述 给定一个无向连通图,顶点编号从0到n-1,用广度优先搜索( ...
- 【阿里内部应用】基于Blink为新商业调控打造实时大数据交互查询服务
基于Blink为新商业调控打造实时大数据交互查询服务 案例与解决方案汇总页: 阿里云实时计算产品案例&解决方案汇总 从IT到DT.从电商到新商业,阿里巴巴的每个细胞都存在大数据的DNA,如何挖 ...
- chart.js x轴显示不全_机床大讲堂第67讲——基于FANUC系统的数控铣床增加第四轴的方法...
点击蓝字,轻松关注! <制造技术与机床>杂志创刊于1951年,是我国机械工业科技期刊中创刊早.发行量大.影响面广的刊物之一,拥有广泛.专业的读者群体.本刊属中文核心期刊,中国科技论文统计用 ...
最新文章
- Spring Boot----监控管理
- Selenium学习(2) 元素定位
- C# 如何设置 richTextBoxr的边距
- VS快捷键及调试方法(含VAssistX快捷键)
- 群晖修改ipv6dns服务器,hiboy大佬的padavan开启IPv6,并使用IPv6登录黑群晖的方法
- 设计模式-结构型软件设计模式(二)
- python之OCR文字识别
- Spine 2D骨骼动画教程-完整实例入门教程
- EasyUI【DataGrid数据查询】
- 板载天线设计相关资料
- 【深入理解计算机系统】CSAPP-实验四:ArchLab全网最详细
- 【转】王阳明:耐住寂寞,守得花开
- 中小企业如何选择进销存软件?
- 论文阅读:Stroke Based Posterior Attention for Online Handwritten Mathematical Expression Recognition
- 解决Maven无法下载源代码包的问题
- 校园快递管理系统-JAVA.JSP【数据库设计、论文、源码、开题报告】
- Unity局域网传输图片等文件
- 新加坡vps和新加坡云服务器有什么区别?
- 零编程基础获取最新、最权威的县以上行政区划代码信息
- 字节跳动软件测试岗,前两面过了,第三面HR天坑