从图的邻接表表示转换成邻接矩阵表示

从图的邻接表表示转换成邻接矩阵表示

typedef struct ArcNode
{
	int adjvex;//该弧指向的顶点的位置
	struct ArcNode *next;//下一条弧的指针
	int weight;//弧的权重
} ArcNode;
typedef struct
{
	VertexType data;//顶点信息
	ArcNode *firstarc;
} VNode,AdList[MAXSIZE];
typedef struct
{
	int vexnum;//顶点数
	int arcnum;//边数
	AdList vertices;//邻接表
} ALGraph; //用邻接表表示法


typedef struct
{
	int vexnum;//顶点数
	int arcnum;//边数
	VertexType[MAXSIZE];//顶点数组
	int AdjMatrix[MAXSIZE][MAXSIZE];//邻接矩阵
} MGraph; //用邻接矩阵表示法


MGraph *AdList_to_AdMatrix(ALGraph G)
{
	MGraph *GL = (MGraph*)malloc(sizeof(MGraph));
	GL->vexnum = G.vexnum;//顶点数
	GL->arcnum = G.arcnum;//边数

	for(int i = 0; i < G.vexnum ; i++ )
	{
		GL->VertexType[i] = G.vertices[i].data;//顶点数组
	}
	for(int j = 0; j < G.vexnum; j++ )//初始化邻接矩阵
	{
		for(int k = 0; k < G.vexnum; k++ )
		{
			if(j == k)
			{
				GL->AdjMatrix[j][k] = 0;//在主对角线上,则为0
			}
			else
			{
				GL->AdjMatrix[j][k] = INFINITY;//否则为无穷
			}	
		}
	}
	for(int j = 0; j < G.vexnum; j++ )
	{
		ArcNode *p = G.vertices[j].firstarc;
		for(int k = 0; k < G.vexnum; k++ )
		{
			if(p)//顶点j出发还有未访问的边
			{
				if(p->adjvex == k)
				{
					GL->AdjMatrix[j][k] = p->weight;//把权赋值到邻接矩阵里
					p = p->next;
				}
			}
			else//如果顶点j出发没有未访问的边了,则跳出这层循环
				break;
		}
	}
	return GL;
}

















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值