基于邻接矩阵的新顶点的增加
描述
给定一个无向图,在此无向图中增加一个新顶点。
输入
多组数据,每组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
#include<iostream>
using namespace std;
#define Maxsize 100
typedef struct {
char vex[Maxsize];
int edge[Maxsize][Maxsize];
int vexnum;
int arcnum;
}MGraph;
void Create(MGraph& g, int n, int m) {
g.vexnum = n;
g.arcnum = m;
for (int i = 0; i <= n; i++) {
g.edge[i][0] = g.edge[0][i] = i;
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
g.edge[i][j] = 0;
}
}
int x, y;
for (int i = 1; i <= m; i++) {
cin >> x >> y;
g.edge[x][y] = 1;
g.edge[y][x] = 1;
}
}
void Insert(MGraph& g, int x) {
g.vexnum = g.vexnum + 1;
g.edge[0][g.vexnum] = x;
g.edge[g.vexnum][0] = x;
for (int i = 1; i <= g.vexnum; i++) {
g.edge[g.vexnum][i] = 0;
g.edge[i][g.vexnum] = 0;
}
}
void Output(MGraph& g) {
for (int i = 0; i <= g.vexnum; i++) {
for (int j = 0; j < g.vexnum; j++) {
cout << g.edge[i][j] << " ";
}
cout << g.edge[i][g.vexnum] << endl;
}
}
int main() {
int n, m;
while (cin >> n >> m && n != 0 && m != 0) {
MGraph g;
Create(g, n, m);
int x;
cin >> x;
Insert(g, x);
Output(g);
}
}