欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

图的邻接矩阵的存储

程序员文章站 2022-05-21 08:51:51
...
#include <stdio.h>
#include <stdlib.h>
//<<邻接矩阵>>
typedef struct MGraph{
	int vexs[100];//由来存放顶点元素 
	int arcs[100][100];//用来存储两个顶点之间是否有边,有1,无0 
	int vexnum;//定点数 
	int arcnum;//边数 
}MGraph;
int Locate(int vexs[],int v,int vexnum)//返回这个数字在顶点数组中的下标 
{
	int i;
	for(i = 0;i < vexnum;i ++)
	{
		if(v == vexs[i])
		{
			return i;
		}
	}
}
void CreateGraph(MGraph &G)
{
	int i,j;
	int pos1,pos2;
	int v1,v2;
	printf("输入顶点个数和边数");
	scanf("%d %d",&G.vexnum,&G.arcnum);
	printf("输入顶点的数据:\n");
	for(i = 0;i < G.vexnum;i ++)
	{
		scanf("%d",&G.vexs[i]);
	}
	for(i = 0;i < G.vexnum;i ++)
	{
		for(j = 0;j < G.vexnum;j ++)
		{
			G.arcs[i][j] = 0;
		}
	}
	printf("输入两个边的端点\n"); 
	for(i = 0;i < G.arcnum;i ++)
	{
		
		scanf("%d %d",&v1,&v2);
		//printf("******\n");
		pos1 = Locate(G.vexs,v1,G.vexnum);
		printf("pos1 = %d\n",pos1);
		pos2 = Locate(G.vexs,v2,G.vexnum);
		printf("pos2 = %d\n",pos2);
		G.arcs[pos1][pos2] = 1;//无向图的边是没有方向的所以1到2有边 ,那2到1也有边,对称的 
		G.arcs[pos2][pos1] = 1;
		
	}
	printf("打印这个图的邻接矩阵\n");
	for(i = 0;i < G.vexnum;i ++)
	{
		if(i == 0)
		{
			printf("  ");
		}
		printf("%d ",G.vexs[i]);
	
	}
	printf("\n");
	printf("------------------------\n");
	for(i = 0;i < G.vexnum;i ++)
	{
		
		printf("%d ",G.vexs[i]);
		printf("|");
		for(j = 0;j < G.vexnum;j ++)
		{
			printf("%d ",G.arcs[i][j]);
		}
		printf("\n");
	}
	
}

int main()
{
	MGraph G;
	//Locate(G.vexs,)
	CreateGraph(G);
	
}
相关标签: 数据结构