我是靠谱客的博主 健康鲜花,最近开发中收集的这篇文章主要介绍数据结构之用数组存储图数据结构之用数组存储图,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

数据结构之用数组存储图

题目

从给定的ctiy.dat文件中读取顶点数据,从distance.dat文件中读取边上的权值,先以矩阵表示法来存储这个图,然后采用深度优先遍历的方式访问这个图。

题目大意

emmmm,简单来说就是建一个图,然后找到两个点的最短距离。

方法

这个题主要是老师给的文件要处理,不会文件处理我也没有办法,然后就是把数据储存起来了,遍历一遍就行。

#include<stdio.h>
#include<string.h>
char city[40][20];
int distance[40][40];
int max(int x,int y)
{
return (x>y?x:y);
}
int min(int x,int y)
{
return (x<y?x:y);
}
int main()
{
printf("重点!!!!!请把文件和程序放在同一目录下!!!n");
FILE*fp;
char *aa;
char filename[]="city.dat",da[10000]={},temp[20000];
int i,j,pre,z,cit=0;
//读取城市信息,将他那个5行合成一行处理
fp=fopen(filename,"r");
fseek(fp, 0L, SEEK_SET);
for(i = 0 ; i < 1002700 ; i++)
{
aa=fgets(temp,400,fp);
//把换行符删去
temp[strlen(temp)-1]='';
//合成到da数组里面
strcat(da,temp);
if(aa==NULL)
break;
}
fclose(fp);
//根据dat文件的规律划分每个城市
pre=0;
for(j=pre; j<strlen(da); j++)
{
if(da[j]==',')
{
for(z=pre; z<j-1; z++)
{
city[cit][z-pre]=da[z];
}
cit++;
//莫名有些多一个空格所以分情况处理空格
if(da[j+1]==' ')
pre=j+2;
else
pre=j+1;
}
}
//因为数字我当时计算是按照个位数计算的,所以0-9没有问题,但是后面出现的10-30就会多一个数字与空格,就要单独处理
for(i=0; i<30; i++)
{
for(j=strlen(city[i])-1; j>=0; j--)
{
if( (city[i][j]==' ') || (city[i][j]>'0'&&city[i][j]<='9') )
city[i][j]='';
}
}
strcpy(filename,"distance.dat");
//读取城市距离信息
fp=fopen(filename,"r");
fseek(fp, 0L, SEEK_SET);
for(i = 0 ; i < 32 ; i++)
{
for(j=0;j<=i;j++){
fscanf(fp,"%d",&distance[i][j]);
}
}
fclose(fp);
char city1[30]={},city2[30]={};
while(printf("请输入出发城市与到达城市n"))
{
scanf("%s %s",city1,city2);
for(i=0;i<33;i++){
if(strcmp(city1,city[i])==0)break;
}
for(j=0;j<33;j++){
if(strcmp(city2,city[j])==0)break;
}
if(i==33||j==33)
printf("没找到相应的城市n");
else
printf("路程为%dn",distance[max(i,j)][min(i,j)]);
}
}

此代码仅供参考使用,请勿直接抄袭!!!

最后

以上就是健康鲜花为你收集整理的数据结构之用数组存储图数据结构之用数组存储图的全部内容,希望文章能够帮你解决数据结构之用数组存储图数据结构之用数组存储图所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部