【数据结构】邻接矩阵及其实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CSDN___CSDN/article/details/84296302

文件操作比直接输入方便很多

直接输入:

//建立图的邻接矩阵储存结构
#include <stdio.h>
#include <string.h>
#define M 20
#define FINITY 5000 
typedef struct 
{
	char vexs[M];
	int edge[M][M];
	int n,e; 
}Mgraph;

//c=0,表示建立无向图
void creat(Mgraph *g,int c)
{
	int i,j,k,w;
	printf("请输入顶点数和边数:"); 
	scanf("%d%d",&g->n,&g->e);
	getchar(); 
	printf("请依次输入各个顶点的信息:");
	for(i=0;i<g->n;i++)
		scanf("%c",&g->vexs[i]);
	getchar();
	for(i=0;i<g->n;i++)
	{
		for(j=0;j<g->n;j++)
		{
			if(i==j)	g->edge[i][j]=0;
			else g->edge[i][j]=FINITY; 
		}
	}
	printf("请输入两个顶点的编号以及权值:\n");
	for(k=0;k<g->e;k++)
	{
		scanf("%d%d%d",&i,&j,&w);
		g->edge[i][j]=w;
		if(c==0)	g->edge[j][i]=w; 
	}
}

void print(Mgraph *g)
{
	int i,j;
	printf("一共有%d个边,%d个点。\n",g->e,g->n);
	printf("各个元素信息:\n");
	for(i=0;i<g->n;i++)
	{
		printf("%c ",g->vexs[i]);
	} 
	printf("\n");
	printf("对应的邻接矩阵:\n");
	for(i=0;i<g->n;i++)
	{
		for(j=0;j<g->n;j++)
		{
			printf("%-5d",g->edge[i][j]);
		}
		printf("\n");
	}
}

int main ()
{
	Mgraph g;
	printf("输入:\n"); 
	creat(&g,0);
	printf("\n");
	printf("输出:\n"); 
	print(&g);
	return 0;
}

文件读取:

//建立图的邻接矩阵储存结构
#include <stdio.h>
#include <string.h>
#define M 20
#define FINITY 5000 
typedef struct 
{
	char vexs[M];
	int edge[M][M];
	int n,e; 
}Mgraph;

//c=0,表示建立无向图
void creat(Mgraph *g,int c)
{
	int i,j,k,w;
	FILE *f;
	f=fopen("test.txt","r");
	if(f)
	{
		fscanf(f,"%d%d",&g->n,&g->e);
		for(i=0;i<g->n;i++)
			fscanf(f,"%s",&g->vexs[i]);
		for(i=0;i<g->n;i++)
		{
			for(j=0;j<g->n;j++)
			{
				if(i==j)	g->edge[i][j]=0;
				else g->edge[i][j]=FINITY; 
			}
		}
		for(k=0;k<g->e;k++)
		{
			fscanf(f,"%d%d%d",&i,&j,&w);
			g->edge[i][j]=w;
			if(c==0)	g->edge[j][i]=w; 
		}
		fclose(f);
	}
	else
	{
		g->n=0;
	}
}

void print(Mgraph *g)
{
	int i,j;
	printf("一共有%d个边,%d个点。\n",g->e,g->n);
	printf("各个元素信息:\n");
	for(i=0;i<g->n;i++)
	{
		printf("%c ",g->vexs[i]);
	} 
	printf("\n");
	printf("对应的邻接矩阵:\n");
	for(i=0;i<g->n;i++)
	{
		for(j=0;j<g->n;j++)
		{
			printf("%-5d",g->edge[i][j]);
		}
		printf("\n");
	}
}

int main ()
{
	Mgraph g;
	creat(&g,0);
	printf("输出:\n"); 
	print(&g);
	return 0;
}

用 法:int fscanf(FILE *stream, char *format,[argument...]);

int fscanf(文件指针,格式字符串,输入列表);

猜你喜欢

转载自blog.csdn.net/CSDN___CSDN/article/details/84296302
今日推荐