1071: 有向图的邻接矩阵存储顶点删除
题目描述
假设有向图G采用邻接矩阵存储,要求删除某一个顶点i(包括与其相关连的边)。
输入
第一行第一个整数n表示顶点的个数(顶点编号为0到n-1),第二个数表示被删除的顶点编号,接下来是为一个nn大小的整数矩阵,表示图的邻接关系。数字为0表示不邻接,1表示邻接。
输出
新的邻接矩阵,第一行表示顶点的个数;
第二行是剩余的结点编号;
接下来是为一个(n-1)(n-1)大小的整数矩阵。
样例输入
5 2
0 1 0 1 0
0 0 1 1 0
0 0 0 0 0
0 0 0 0 0
1 0 0 1 0
样例输出
4
0134
0110
0010
0000
1010
思路:
删除(输入矩阵中所要求的行列)后输出即可,一句话过于草率,详细参照下面的举例。
【例】题干要求删除第二个点,把第二行第二列删除后输出就得到了答案。需要注意的是,题干要求顶点编号从0开始,所以我们也要从0开始数行与列。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, m, a[100][100], i, j; //n为顶点个数,m为将删除的顶点
cin >> n >> m; //scanf("%d %d", &n, &m);
for(int i=0;i<n;i++) for(int j=0;j<n;j++) cin >> a[i][j]; //scanf("%d", &map);
cout << n-1 << endl; //printf("\n%d", n-1);输出剩余点的个数
for(i=0;i<n;i++) if(i!=m) cout<< i; //printf("%d", i); 输出剩余点的编号
cout << endl; //printf("\n");
for(i=0;i<n;i++) //输出删除点Vm后的矩阵
{
for(j=0;j<n;j++)
{
if(i!=m&&j!=m)
{
cout << a[i][j]; //printf("%d", a[i][j]);
}
}
if(i!=m&&j!=m)
cout << endl; //printf("\n");
}
return 0;
}
以上方法仅供参考,欢迎互联网的广大朋友们提出指正。