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

描述

给定一个无向图,在此无向图中删除一条边。(题目写错字了)

输入

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

题外话:

做题顺序是4004-4006-4008-4010,一路下来做到这道题,对邻接矩阵的相关操作应该已经很熟悉了吧,所以在创建、输出方面不做过多赘述了,当然如果你是一开始就做的这道题,而且还不太明白的话,可以看我的这篇文章,比较详细地介绍了初始化和赋值的思路~

4004-基于邻接矩阵的新顶点的增加(C++,附思路)_鹤天寻的博客-CSDN博客icon-default.png?t=LA92https://blog.csdn.net/qq_54416938/article/details/121574711?spm=1001.2014.3001.5501

思路:

删除边的话,告诉了两个节点,就相当于这两个节点现在不能互相到达了,所以将相应的对称位置置为0即可。

#include
#include
#include
#include
#include
#include
using namespace std;

typedef struct
{
	int vexnum;
	int matrix[100][100];
}AMGraph;
void Create(AMGraph& amg, int n, int m)
{
	amg.vexnum = n;
	for (int i = 0; i <= n; i++)
	{
		amg.matrix[i][0] = i;
		amg.matrix[0][i] = i;
	}
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= n; j++)
			amg.matrix[i][j] = 0;
	int h, k;
	for (int i = 0; i < m; i++)
	{
		cin >> h >> k;
		amg.matrix[h][k] = 1;
		amg.matrix[k][h] = 1;
	}
	int p1, p2;
	cin >> p1 >> p2;
	amg.matrix[p1][p2] = 0;
	amg.matrix[p2][p1] = 0;
}
void Show(AMGraph amg,int n)
{
	for (int i = 0; i <= n; i++)
	{
		for (int j = 0; j <= n; j++)
		{
			if (j != 0)
				cout << ' ';
			cout << amg.matrix[i][j];
		}
		cout << endl;
	}
}
int main()
{
	int m, n;
	while (cin >> n >> m && m != 0 && n != 0)
	{
		AMGraph amg;
		Create(amg, n, m);
		Show(amg, n);
	}
	return 0;
}

你可能感兴趣的:(这只是一场训练,数据结构,算法,C++,北林数据结构实验)