数据结构-邻接矩阵创建算法

下面是一个例子:

共有abcd四个顶点,并且有<a,b>,<b,c>,<c,d>,<d,a>四个边,并且是无向边。

为此我们可以建立一个矩阵来存储,存储方式如下:

其中,0代表当前位置没有边,1代表有边,也可以是权值大小。

上图的存储方式和二维数组的存储方式极为相似。

为此我们可以使用二维数组来模拟这个存储。

其中行索引代表以当前索引为弧尾的边。

列索引代表以当前索引为弧头的边。

#include<stdio.h>
#define MAX 100
typedef struct Mgraph{
	char vertex[MAX];
	int arcs[MAX][MAX];
	int vexnum,acrnum;
}Mgraph;

int LocateVerTex(Mgraph *G,char v)	//搜索顶点在邻接矩阵中的下标索引位置 
{
	int k;
	for(k=0;k<G->vexnum;k++){
		if(v == G->vertex[k])
			return k;
	}
	return -1;		//-1代表未搜寻到下标索引 
}

void CreateMgraph(Mgraph *G)
{
	int i,j,k,weight;
	char ch1,ch2;
	printf("请输入顶点数和边数:\n");
	scanf("%d %d",&(G->vexnum),&(G->acrnum));	//输入顶点数和边数
	getchar();
	printf("下面请输入{%d}个顶点:\n",G->vexnum);
	for(i=0;i<G->vexnum;i++){	//输入每个顶点 
		scanf("%c",&(G->vertex[i]));
	}
	getchar();
	for(i=0;i<G->vexnum;i++){			//初始化邻接矩阵。 
		for(j=0;j<G->vexnum;j++){
			G->arcs[i][j] = 0;	
		}
	}
	printf("下面请顺序输入顶点v1,顶点v2,以及边权大小\n");
	for(k=0;k<G->acrnum;k++){
		scanf("%c %c %d",&ch1,&ch2,&weight);
		getchar();
		i = LocateVerTex(G,ch1);
		j = LocateVerTex(G,ch2);
		if(i==-1||j==-1){
			printf("失败.\n");
			k = k - 1;	//索引减1,为的是下次还是当前索引。 
			continue;	//代表该顶点出错重新执行。 
		}
		else{
			G->arcs[i][j] = weight;
			G->arcs[j][i] = weight;
		}
		printf("成功.\n");
	}
}

int main()
{
	Mgraph G;
	CreateMgraph(&G);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

是洋洋a

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

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

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

打赏作者

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

抵扣说明:

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

余额充值