1.实验要求
一个图由其顶点与边的关联关系唯一确定。对于图G(p,q),我们可以用一个p行q列的矩阵来表示这种关系,可以使用关联矩阵和邻接矩阵来表示图。
关联矩阵:每一行i用来表示顶点,每一列j表示边,对于每个i,j我们将顶点i不属于边j的位置(i,j)用0来表示,属于则用1表示,如果有环则用2表示。
邻接矩阵:将行和列都表示顶点,将相邻的点之间用1表示,不相邻的点之间用0表示。
例如,有如下图:
我们用关联矩阵表示为:
用邻接矩阵表示为:
2.编程要求
编写程序使用两种矩阵分别表示下面两个图:
3.测试数据
关联矩阵:
5 4
a 1 2
b 2 3
c 3 4
d 1 4
e 2 4
5,4分别是边数和结点个数,
字母表示边,数字表示结点。
例如:a 1 2 表示为边a将1.2连接起来
临边矩阵:
4
2 4 0
1 3 4
2 4 0
1 2 3
4为结点个数。
第一行的2 4 0表示为第一个结点与2 4两个结点相连,
第二行的1 3 4表示为第二个结点与1 3 4三个结点相连,
以此类推。
4.实验代码
#include<iostream>
using namespace std;
int main()
{
int n, m;
char a[50];
int b[50][50];
int i, j, k;
cout << "输入边的个数,点的个数" << endl;
cin >> n >> m;
for (i = 0; i < n; i++)
{
cin >> a[i];
for (j = 0; j < 2; j++)
{
cin >> b[i][j];
}
}
//输入end
cout << "关联矩阵" << endl;
cout << " ";
for (i = 0; i < n; i++)
{
cout << " " << a[i] ;
}
cout << endl;
for (i = 0; i < m; )
{
cout << ++i;
for (j = 0; j < n; j++)
{
if (b[j][0] == i || b[j][1] == i )
{
cout << " 1";
}
else
cout << " 0";
}
cout << endl;
}
cout << "邻接矩阵" << endl;
int cnt = 0;
cout << "请输入点的个数" << endl;
cin >> n;
for (i = 0; i < n; i++)
{
for (j = 0; j < 3; j++)
{
cin >> b[i][j];
}
}
cout << "邻接矩阵" << endl;
cout << " ";
for (i = 0; i < n;)
{
cout << " " << ++i;
}
cout << endl;
for (i = 0; i < n; )
{
cout << ++i;
for (j = 0; j < n; j++)
{
for (k = 0; k < 3; k++)
{
cnt = 0;
if (b[i][k] - 1 == j)
{
cout << " 1";
cnt = 1;
break;
}
if (k == 2 && cnt == 0)
{
cout << " 0";
cnt = 0;
break;
}
}
}
cout << endl;
}
return 0;
}