第六章--图邻接矩阵实现(两种方式)

邻接矩阵实现(快速建立方式)

#include<stdio.h>

#define MaxVertexNum 20

int main()
{
	int G[MaxVertexNum][MaxVertexNum];
	int Nv,Ne,GData[MaxVertexNum],i,j;
	int v1,v2,w;
	printf("请输入结点数和边数:\n");
	scanf("%d %d",&Nv,&Ne);
	printf("请输入结点信息:\n"); 
	for(i=0;i<Nv;i++)
	{
		scanf("%d",&GData[i]);
	}
	for(i=0;i<Nv;i++)
	{
		for(j=0;j<Nv;j++)
		{
			G[i][j]=0;
		}
	}
	printf("请输入边的信息:\n");
	for(i=0;i<Ne;i++)
	{
		scanf("%d %d %d",&v1,&v2,&w);
		G[v1][v2]=w;
		G[v2][v1]=w;
	}
	printf("图的结点信息以及权重信息为:\n");
	for(i=0;i<Nv;i++)
	{
		printf("%d ",GData[i]);
	}
	printf("\n");
	for(i=0;i<Nv;i++)
	{
		for(j=0;j<Nv;j++)
		{
			printf("%d ",G[i][j]);
		}
		printf("\n");
	}
	
 } 

邻接矩阵用结构体封装(通用性较强)

#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define MaxVertexNum 20
typedef int WeightType;
typedef int VertexType;
typedef int Status;

typedef  struct GNode *PtrToGNode;
typedef PtrToGNode MGraph;

typedef struct ENode *PtrToEdge;
typedef PtrToEdge Edge;
struct GNode
{
	int Nv;
	int Ne;
	WeightType G[MaxVertexNum][MaxVertexNum];
	VertexType Data[MaxVertexNum];
};
struct ENode
{
	VertexType V1,V2;
	WeightType Weight;
};
MGraph CreateGraph(int VertexNum)
{
	MGraph Graph;
	Graph=(MGraph)malloc(sizeof(struct GNode));
	Graph->Nv=VertexNum;
	Graph->Ne=0;
	for(int i=0;i<Graph->Nv;i++)
	{
		for(int j=0;j<Graph->Nv;j++)
		{
			Graph->G[i][j]=0;
		}
	}
	printf("请输入结点信息:");
	for(int i=0;i<Graph->Nv;i++)
	{
		scanf("%d",&Graph->Data[i]);
	}
	return Graph;
}
void CreateEdge(MGraph Graph,int EdgeNum)
{
	PtrToEdge E;
	Graph->Ne=EdgeNum;
	E=(Edge)malloc(sizeof(struct ENode));
	printf("请输入边的信息:");
	for(int i=0;i<Graph->Ne;i++)
	{
		scanf("%d %d %d",&E->V1,&E->V2,&E->Weight);
		Graph->G[E->V1][E->V2]=E->Weight;
		Graph->G[E->V2][E->V1]=E->Weight;
	}
}
void Print(MGraph Graph)
{
	int i,j;
	printf("当前结点信息为:");
	for(i=0;i<Graph->Nv;i++)
	{
		printf("%d ",Graph->Data[i]);
	}
	printf("\n");
	printf("权重信息为:     \n");
	for(i=0;i<Graph->Nv;i++)
	{
		printf("%-16s"," ");
		for(j=0;j<Graph->Nv;j++)
		{
			printf("%d ",Graph->G[i][j]);
		}
		printf("\n");
	}
}
int main()
{
	MGraph Graph;
	int Nv,Ne;
	printf("请输入结点树与边数");
	scanf("%d %d",&Nv,&Ne);
	Graph=CreateGraph(Nv);
	CreateEdge(Graph,Ne);
	Print(Graph);
}

猜你喜欢

转载自blog.csdn.net/a13683857889/article/details/87552482
今日推荐