假设带权有向图采用邻接矩阵存储。用图的基本运算算法,包括创建图的邻接矩阵,输出图的邻接矩阵,销毁图的邻接矩阵,求图中顶点的度。

一、实验目的

假设带权有向图采用邻接矩阵存储。用图的基本运算算法,包括创建图的邻接矩阵,输出图的邻接矩阵,销毁图的邻接矩阵,求图中顶点的度。并用如图图片所示的图进行测试

二、实验内容

本实验旨在通过设计并实现一个带权有向图的基本运算算法,来加深对图数据结构及其基本操作的理解。实验内容包括创建图的邻接矩阵、输出图的邻接矩阵、销毁图的邻接矩阵以及求图中顶点的度

三、实现过程

实现思路:

定义图的数据结构,包括顶点数、边数、顶点数组和边的邻接矩阵。

实现创建图的函数,根据输入的顶点数、边数和边的权重矩阵初始化图的结构。

实现输出图的函数,遍历邻接矩阵并打印出来。

实现销毁图的函数,释放图所占用的内存空间。

实现求顶点度的函数,分别计算顶点的入度和出度。

在主函数中调用上述函数,展示图的基本运算功能。

实现代码:

#include <stdio.h>
#include <malloc.h>
#define MAXVEX 100			
#define INF 32767				
typedef char VertexType[10];
typedef struct vertex
{	int adjvex;				
	VertexType data; 		
} VType;					
typedef struct graph
{	int n,e;				
	VType vexs[MAXVEX];			
	int edges[MAXVEX][MAXVEX];
} MatGraph;						

void CreateGraph(MatGraph &g,int A[][MAXVEX],int n,int e)
{
	int i,j;
	g.n=n; g.e=e;
	for (i=0;i<n;i++)
		for (j=0;j<n;j++)
			g.edges[i][j]=A[i][j];
}
void DestroyGraph(MatGraph g)		
{
}
void DispGraph(MatGraph g)		
{
	int i,j;
	for (i=0;i<g.n;i++)
	{
		for (j=0;j<g.n;j++)
			if (g.edges[i][j]<INF)
				printf("%4d",g.edges[i][j]);
			else
				printf("%4s","∞");
		printf("\n");
	}
}
void AddaVex(MatGraph &g)	
{
	g.n++;
}
int InsertEdge1(MatGraph &g,int u,int v,int w)	
{
	if (u<0 || u>=g.n || v<0 || v>=g.n)
		return 0;			
	g.edges[u][v]=w;
	g.edges[v][u]=w;
	g.e++;
	return 1;
}
int InsertEdge2(MatGraph &g,int u,int v,int w)	
{
	if (u<0 || u>=g.n || v<0 || v>=g.n)
		return 0;			
	g.edges[u][v]=w;
	g.e++;
	return 1;
}
int Degree1(MatGraph g,int v)	
{
	int i,d=0;
	if (v<0 || v>=g.n)
		return -1;			
	for (i=0;i<g.n;i++)
		if (g.edges[v][i]>0 && g.edges[v][i]<INF)
			d++;				
	return d;
}
int Degree2(MatGraph g,int v)	
{
	int i,d1=0,d2=0,d;
	if (v<0 || v>=g.n)
		return -1;			
	for (i=0;i<g.n;i++)
		if (g.edges[v][i]>0 && g.edges[v][i]<INF)
			d1++;				
	for (i=0;i<g.n;i++)
		if (g.edges[i][v]>0 && g.edges[i][v]<INF)
			d2++;				
	d=d1+d2;
	return d;
}

int main(){
	MatGraph g;
	int n=7,e=12,i;
	int A[MAXVEX][MAXVEX]={
		{0,2,5,3,INF,INF,INF},
		{INF,0,2,INF,INF,8,INF},
		{INF,INF,0,1,3,5,INF},
		{INF,INF,INF,0,5,INF,INF},
		{INF,INF,INF,INF,0,3,9},
		{INF,INF,INF,INF,INF,0,5},
		{INF,INF,INF,INF,INF,INF,0}};
	CreateGraph(g,A,n,e);
	printf("图G的存储结构:\n");DispGraph(g);
	printf("图G中所有顶点的度:\n");
	printf("顶点\t度\n");
	for(i=0; i<g.n; i++)
		printf("%d\t%d\n",i,Degree2(g,i));
	DestroyGraph(g);
}

实验结果(运)行图:

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值