基于邻接矩阵的边的删除
描述
给定一个无向图,在此无向图中增加一条边。
输入
多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。顶点编号为1到n。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有两个数字f和g,代表删除的边所依附的两个顶点。当n和m都等于0时,输入结束。
输出
每组数据输出n行。为删除边后的邻接矩阵。每两个数字之间用空格隔开。
输入样例 1
3 2 1 2 2 3 3 2 3 1 1 2 1 2 0 0
输出样例 1
0 1 2 3 1 0 1 0 2 1 0 0 3 0 0 0 0 1 2 3 1 0 0 0 2 0 0 0 3 0 0 0
来源
#include<iostream>
using namespace std;
#define Max 100
typedef struct {
char vex[Max];
int edge[Max][Max];
int vexnum, arcnum;
}MGraph;
void Create(MGraph& g, int n, int m) {
g.vexnum = n;
g.arcnum = m;
for (int i = 0; i <= g.vexnum; i++) {
g.edge[i][0] = i;
g.edge[0][i] = i;
}
for (int i = 1; i <= g.vexnum; i++) {
for (int j = 1; j <= g.vexnum; j++) {
g.edge[i][j] = 0;
}
}
int x, y;
for (int i = 1; i <= g.arcnum; i++) {
cin >> x >> y;
g.edge[x][y] = 1;
g.edge[y][x] = 1;
}
}
void Delete(MGraph& g,int x,int y) {
g.arcnum = g.arcnum + 1;
g.edge[x][y] = 0;
g.edge[y][x] = 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, y;
cin >> x >> y;
Delete(g, x, y);
Output(g);
}
}