文件操作比直接输入方便很多
直接输入:
//建立图的邻接矩阵储存结构
#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(文件指针,格式字符串,输入列表);