离散数学实验(七)图的表示

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;
}
 
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值