某城市要在各个辖区之间修建地铁,由于地铁建设费用昂贵,因此需要合理安排地铁建设线路,使市民可以沿地铁到达各个辖区,并使总费用最小。
设计要求:
- 输入各个辖区名称和各辖区间直接距离(地铁铺设费用与距离成正比)。
- 根据辖区距离信息,计算出应该在哪些辖区建立地铁线路。
- 输出应该建设的地铁线路及所需建设总里程。
实现提示:
根据输入的辖区信息、构建图,使用的数据结构是无向图,采用邻接矩阵为存储结构,编程语言用的是C语言。代码如下:
#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
#include "string.h"
#define INFINITY 100000//最大值
#define MAX_VERTEX_NUM 20//最大顶点个数
typedef int VRType;
typedef int InfoType;
//定义类型
typedef struct ArcCell{
VRType adj;//VRType是顶点关系类型,对无权图,用1或0表示相邻否,对带权图,则为权值类型
int *info;//该弧相关信息的指针
}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct{
char vexs[MAX_VERTEX_NUM][10];//顶点向量
AdjMatrix arcs;//邻接矩阵
int vexnum,arcnum;//图的当前顶点数和弧数
}MGraph;
int LocateVex(MGraph *G,char a[10]){
//查找辖区u在辖区图中的位置
int i;
for(i=0;i<G->vexnum;i++){
//循环执行条件是当u=V[i]时停止,求i值
if(strcmp(a,G->vexs[i])==0)
return i;
}
if(i==G->vexnum)
return -1;
}
int CreateUDN(MGraph *G)
{
//采用数组(邻接矩阵)表示法,构造无向网G。