数据结构课程设计---------最少换车次数问题

问题描述: 设某城市有n个车站,并有m条公交线路连接这些车站。设这些公交车都是单向的,这n个车站被顺序编号为0~n-1。编号程序,输入该城市的公交线路数,车站个数,以及各公交线路上的各站编号。
实现要求:求得从站0出发乘公交车至站n一1的最少换车次数。
程序设计思路:利用输入信息构建一张有向图G(用邻接短阵g表示),有向图的顶点是车站,若有某条公交线路经i站能到达j站,就在顶点i到顶点j之间设置一条权为1的有向边<i,j)。这样,从站x至站y的最少上车次数便对应于图G中从点x至点y的最短路径长度。而程序要求的换车次数就是上车次数减1。

代码如下:

#include 
#include 
#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;iarcs[i][j] = INFINITY;    //邻接矩阵初始化
	for(s=0;sarcs[t[i]][t[j]]=1;
		}
	}
	printf("\n★ 请输入上车站编号和下车站编号【0<=编号<=%d】:\n",n-1);
	scanf("%d%d",start,end);
	if( *start<0 || *start>n-1 || *end<0 || *end>n-1)
		return -1;
	return 0;
}
int findMinmum(Graph g,int start,int end)   //迪杰斯特拉算法找最小上车次数
{
	int s[MAXVNUM];
	int i,j,u,*dist,min;
	if(start==end)
		return 0;
	dist=(int *)malloc(sizeof(int));
	if(dist==NULL)
		return -1;
	for(i=0;i


你可能感兴趣的:(c/c++,数据结构与算法)