问题描述: 设某城市有n个车站,并有m条公交线路连接这些车站。设这些公交车都是单向的,这n个车站被顺序编号为0~n-1。编号程序,输入该城市的公交线路数,车站个数,以及各公交线路上的各站编号。
实现要求:求得从站0出发乘公交车至站n一1的最少换车次数。
程序设计思路:利用输入信息构建一张有向图G(用邻接短阵g表示),有向图的顶点是车站,若有某条公交线路经i站能到达j站,就在顶点i到顶点j之间设置一条权为1的有向边<i,j)。这样,从站x至站y的最少上车次数便对应于图G中从点x至点y的最短路径长度。而程序要求的换车次数就是上车次数减1。
实现要求:求得从站0出发乘公交车至站n一1的最少换车次数。
程序设计思路:利用输入信息构建一张有向图G(用邻接短阵g表示),有向图的顶点是车站,若有某条公交线路经i站能到达j站,就在顶点i到顶点j之间设置一条权为1的有向边<i,j)。这样,从站x至站y的最少上车次数便对应于图G中从点x至点y的最短路径长度。而程序要求的换车次数就是上车次数减1。
代码如下:
#include <stdio.h>
#include <stdlib.h>
#define INFINITY 9999
#define MAXVNUM 30
char ans;
typedef struct
{
int Vnum;
int arcs[MAXVNUM][MAXVNUM]; //图的存储结构为邻接矩阵
}Graph;
int createGraph(Graph *g,int *start,int *end)
{
int n,m,i,j,k,s,count;
int t[MAXVNUM];
printf("\n★ 请输入公交车站数和公交车数:\n");
scanf("%d %d",&n,&m);
if(n<=1 || m<1)
return -1;
g->Vnum = n;
for(i=0;i<n;i++)
for(j=0;j&l