比如:泉州--福州
泉州--厦门 这2地之间的算法程序,
解决方案 »
- asp.net dataset 改变图片大小 求高手
- 为什么报表的table会分开呢,原本一个页面分开两页显示 呢见图
- .net 开发的程序,登录时出错了.
- 如果你在自己的网站上出售自己的二手书籍,而网站没有备案,会被公安抓吗?
- AJAX.net配置问题?
- 在哪里有免费的REPORTING SERVICES下载?
- 在asp中怎么来检验数据库表中有没有你要查找的数据啊?比如,在delphi中可以使用locate语句~~在asp中有什么语句么?谢谢!
- webgrid如何按某列倒排序
- 200分请高手讲讲tabstrip和multipage的使用!!!
- IBuySpy Store购物例子中注册时的疑问?是在哪一步验证同名email是否存在
- gridview 找不到HtmlInputCheckBox
- JS 写的右键菜单如何分列显示?
#include<stdio.h>
#include<string.h>
#include<math.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct
{
char Cname[21];
float Lat;
float Lon;
} CITY; ////定义一个结构,包含城市名称纬度和经度。
typedef struct
{
int Nb_cities;
CITY Cities[20];
} CITIES_LIST; /////这个结构应该是包含了城市的个数和刚才的结构float **DistancesMatix = NULL; ///距离的二维数组的二级指针(即二维数组首地址的指针)char* GetFileName(void)
{
static char file[20];
printf("Enter the file name:\n");
scanf("%s",file);
return file;
} ////该函数的功能是输入文件名,将其出入file并作为返回值返回。void ReadFile(CITIES_LIST *list) ////c中没有引用,所以此处改为指针传递
{
char *file=GetFileName(); ///调用getfilename获取文件名。
FILE*fp=NULL;
int i;
fp=fopen(file,"r"); ////以只读方式打开存储文件名的流。
fscanf(fp,"%d\n",list->Nb_cities); ////从流中读取城市的个数。
for(i=0;i<list->Nb_cities;i++)
{
fscanf(fp,"%s %f %f\n",list->Cities[i].Cname,&(list->Cities[i].Lat),&(list->Cities[i].Lon));
} ///////依次读取城市的名称和城市的经纬度。
fclose(fp);
} void WriteDistanceMatrix(CITIES_LIST list)
{
int i, j, no = -1;
char *file=GetFileName();
FILE*fp=NULL; if(DistancesMatix == NULL) return; fp=fopen(file,"w"); /////以写方式打开文件
fprintf(fp, "DESTINATION "); ////将DESTINATION 字符串写入stdout流中for(i=0; i<list.Nb_cities; ++i)
{
fprintf(fp, "%s ", list.Cities[i].Cname); /////依次写入城市的名字到stdout
}
fprintf(fp, "\n"); //////换行for(i=0; i<list.Nb_cities; ++i)
{
fprintf(fp, "%s ", list.Cities[i].Cname);
for(j=0; j<list.Nb_cities; ++j)
{
fprintf(fp, "%.2f ", DistancesMatix[i][j]);
}
fprintf(fp, "\n");
}
} /////void CalculateDistances(CITIES_LIST list) /////计算城市距离的
{
int i, j;
float res; if(DistancesMatix != NULL)
{
free(DistancesMatix);
} /////这里只是检查一下这个指针是否存在切指向NULL,不过new和delete是c++的用法改成c的malloc和free了
DistancesMatix = (float **) malloc(sizeof( float*)*list.Nb_cities);
for(i=0; i<list.Nb_cities; ++i)
{
DistancesMatix[i] = (float *) malloc(sizeof(float)*list.Nb_cities);
} //////为该指针分配一个二维数组,动态分配二维数组的一般方法。for(i=0; i<list.Nb_cities; ++i)
{
DistancesMatix[i][i] = 0;
for(j=i+1; j<list.Nb_cities; ++j)
{
res = cos(list.Cities[i].Lat) * cos(list.Cities[j].Lat);
res *= cos(list.Cities[i].Lon - list.Cities[j].Lon);
res += sin(list.Cities[i].Lat) * sin(list.Cities[j].Lat);
res = 6378 * acos(res);
DistancesMatix[i][j] = res;
DistancesMatix[j][i] = res;
}
}
} ////////这个是计算距离的算法,就是你给的那个公式。老实说你给的那个公式我没看懂。void main (void)
{
CITIES_LIST list; ///定义变量
memset(&list, 0, sizeof(CITIES_LIST)); ///初始化内存.ReadFile(&list);
CalculateDistances(list);
WriteDistanceMatrix(list);
}
http://topic.csdn.net/u/20081020/16/6601cf5b-61e9-4697-a798-727e1e4df1d9.html