数据结构-使用邻接矩阵方法完成对图的存储,并输出该图

 

 主函数

#include "./praph.h"

int main(int argc, const char *argv[])
{
	Graph *G = create();
	if (NULL == G)
	{
		return -1;
	}

	add_rel(G,'A','B');
	add_rel(G,'A','C');
	add_rel(G,'A','D');
	add_rel(G,'C','B');

	show(G);
	return 0;
}

头文件

#ifndef __PRAPH_H__
#define __PRAPH_H__

#define N 4

#include <stdio.h>
#include <stdlib.h>

typedef char datatype;
typedef struct
{
	datatype data[N];    //存放顶点元素
	int rel[N][N]; 		//存放关系的数组
}Graph;

//创建
Graph *create();

//获取顶点下标函数
int get_pos(Graph *G,datatype v);

//添加关系
int add_rel(Graph *G,datatype v1,datatype v2);

//show函数
void show(Graph *G);


#endif

被调函数

#include "./praph.h"


//创建
Graph *create()
{
	Graph *G = (Graph*)malloc(sizeof(Graph));
	if (NULL == G)
	{
		printf("申请失败");
		return NULL;
	}

	//初始化
	for (int i=0;i<N;i++)
	{
		G->data[i] = 'A'+i;
	}
	for (int i=0;i<N;i++)
	{
		for (int j=0;j<N;j++)
		{
			G->rel[i][j] = 0;
		}
	}
	printf("创建成功\n");
	return G;
}

//获取顶点下标函数
int get__pos(Graph *G,datatype v)
{
	for (int i=0;i<N;i++)
	{
		if (G->data[i] == v)
		{
			return i;
		}
	}
	return -1;
}


//添加关系
int add_rel(Graph *G,datatype v1,datatype v2)
{
	if (G == NULL)
	{
		printf("图错误\n");
		return -1;
	}

	int pos1 = get__pos(G,v1);
	int pos2 = get__pos(G,v2);
	if (pos1 == -1 || pos2 == -1)
	{
		printf("所给节点不合法\n");
		return -1;
	}

	G->rel[pos1][pos2] = G->rel[pos2][pos1] = 1;
	printf("%c和%c关系建立成功\n",v1,v2);
	return 0;
}

//show函数
void show(Graph *G)
{
	printf("当前图如下\n");
	for (int i=0;i<N;i++)
	{
		printf("\t%c",G->data[i]);
	}
	printf("\n");
	//输出
	for (int i=0;i<N;i++)
	{
		printf("%c\t",G->data[i]);
		for (int j=0;j<N;j++)
		{
			printf("%d\t",G->rel[i][j]);
		}
		printf("\n");
	}
}

测试

创建成功
A和B关系建立成功
A和C关系建立成功
A和D关系建立成功
C和B关系建立成功
当前图如下
	A	B	C	D
A	0	1	1	1	
B	1	0	1	0	
C	1	1	0	0	
D	1	0	0	0	

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coding Peasant

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值