资源描述
设计题目<二〉:7、3、4交通咨询系统设计P160
一、设计要求
1.问题描述
ﻩﻩ根据不同目得得旅客对交通工具有不同得要求。例如,因公出差得旅客希望在旅途中得时间尽可能得短,出门旅行得旅客希望旅费尽可能得少,而老年人则要求中转次数少。模拟一个全国城市之间得咨询交通程序,为旅客提供两种或三种最优得交通路线。
2。需求分析
二、概要设计
1.主界面设计
(图2、1“交通咨询系统”主菜单)
2。存储结构设计
本系统采用图结构类型存储抽象交通咨询系统得信息。
typedef struct TrafficNode
{
char name[MAX_STRING_NUM]; //班次 //MAX_STRING_NUM最为10
int StartTime, StopTime; //起止时间
ﻩint EndCity; //该有向边指向得顶点在数组中得位置,即该城市编号
ﻩint Cost; //票价
} TrafficNodeDat;
typedef struct VNode
{
ﻩCityType city;
ﻩint TrainNum, FlightNum; //标记下面Train数组与Flight数组里元素个数
TrafficNodeDat Train[MAX_TRAFFIC_NUM]; //数组成员为结构体,记录了到达城市、起止时间、票价与班次
ﻩTrafficNodeDat Flight[MAX_TRAFFIC_NUM];
ﻩ// int Cost; //遍历时到达该城市得耗费(时间或者费用)
} VNodeDat;
typedef struct PNode
{
ﻩint City;
int TraNo;
} PNodeDat;
3。系统功能设计
(1)添加城市。添加一个城市得名称
(2)删除城市。输入一个城市名称,删除该城市.
(3)添加交通路线。输入起始城市、终点城市、航班或火车、车次、起始时间、终点时间与票价
(4) 删除交通路线。输入火车或飞机得班次删除该交通路线。
(5)查询最小费用路线。输入起始城市、终点城市、航班或火车、车次、起始时间、终点时间查询最小费用路线。
三、模块设计
1.模块设计
无向网操作模块
工作区模块
主程序模块
ﻩﻩ (图2、2 模块调用示意图)
2.系统子程序及功能设计
(1)int ShowMenu()//主菜单
(2)void CopyRight()
(3)int SeekCity(char *name) //寻找城市
(4)int InsertCity(char *Name) //添加城市
(5)int SaveSysInfo() //向程序输入数据
(6)int DelCity(char *Name) //删除城市
(7)int InsertTrain(char *train, char *StartCity, char *EndCity, int StartTime, int EndTime, int cost)//添加火车路线
(8)int InsertFlight(char *flight, char *StartCity, char *EndCity, int StartTime, int EndTime, int cost)//添加飞机航线
(9)int DelPath(char *name)//删除路线
(10)void Dijkstra(int matx[Dij_MAXN][Dij_MAXN], int p_start, int p_end, int TravelType)
(11)int InitSysData()//存储数据
(12)int SearchMinTime(CityType City, CityType EndCity, int CurTime, int curPathNo, int TravelType)//查询最短时间
(13)int CalcMinTime(int StartCity, int EndCity, int TravelType) //显示最短时间
(14)int CalcMinCost(int StartCity, int EndCity, int TravelType)//最少花费
(15)int main()//主函数
3。函数主要调用关系图
15main()
8
9
1
12
7
5
4
13
6
3
6
1
2
2
3
7
1
6
ﻩ ﻩﻩﻩ (图2、3函数主要调用关系图)
四、详细设计
1.数据类型定义
(1)全局变量得定义
typedef short int CityType;//CityType 定义短整形得变量
typedef struct TrafficNode
{
ﻩchar name[MAX_STRING_NUM]; //班次 //MAX_STRING_NUM最为10
ﻩint StartTime, StopTime; //起止时间
ﻩint EndCity; //该有向边指向得顶点在数组中得位置,即该城市编号
int Cost; //票价
} TrafficNodeDat;
typedef struct VNode
{
CityType city;
ﻩint TrainNum, FlightNum; //标记下面Train数组与Flight数组里元素个数
ﻩTrafficNodeDat Train[MAX_TRAFFIC_NUM]; //数组成员为结构体,记录了到达城市、起止时间、票价与班次
TrafficNodeDat Flight[MAX_TRAFFIC_NUM];
ﻩ// int Cost; //遍历时到达该城市得耗费(时间或者费用)
} VNodeDat;
typedef struct PNode
{
ﻩint City;
ﻩint TraNo;
} PNodeDat;
2.系统主要子程序详细设计
(1)用户工作区模块得设计
int ShowMenu()
{
printf("\n|******************欢迎使用交通咨询系统*******|\n”);
printf(”\n|-----———-----—-——-1: 添加城市——-------——-——-—|”);
ﻩprintf("\n|——--———-—-—-——-———2: 删除城市----——----——-—--|”);
ﻩprintf(”\n|——————--—--—----——3: 添加交通路线-———--———-——|");
printf("\n|———-—--——----———-—4: 删除交通路线—-—--—--——--|”);
printf("\n|-—---——---—-----—-5: 查询最小费用路线---—-———|");
printf(”\n|-----———----------6: 查询最快路线-———--—————-|");
ﻩprintf(”\n|----------------—-7: 清除屏幕--—-—---———-—---|”);
printf("\n|-—--—--—-------—--0: 退出-——--—--—------—————|\n”);
printf("\n|***********o(∩_∩)o o(∩_∩)o **************|\n”);
ﻩprintf("\n请输入您得选择:");
ﻩreturn 1;
}
(2)用Dijkstra算法求两段路程得最短距离
void Dijkstra_Output(int matx[Dij_MAXN][Dij_MAXN], int PreCity[Dij_MAXN], int p_end, int TravelType)
{
int track[Dij_MAXN];
ﻩint i = 0, j, k, min, tmp, end, cost = 0;
ﻩj = p_end; track[i++] = j;
ﻩwhile (PreCity[j] >= 0)
{
cost += matx[PreCity[j]][j];
track[i++] = j = PreCity[j];
}
ﻩprintf("\nTrack Way:”);
if (!TravelType)
{
ﻩﻩfor (i--; i>0; i--)
{
ﻩﻩ printf("\n%s:", CityName[track[i]]);
end = track[i - 1]; min = 32767;
ﻩ for (k = 0; k<AdjList[track[i]]、TrainNum; k++)
if (AdjList[track[i]]、Train[k]、EndCity == end&&min〉AdjList[track[i]]、Train[k]、Cost)
ﻩﻩ{
ﻩ min = AdjList[track[i]]、Train[k]、Cost;
ﻩ tmp = k;
ﻩﻩ}
ﻩprintf("%s”, AdjList[track[i]]、Train[tmp]、name);
ﻩ ﻩprintf("%2d:%2d—%2d:%2d”, AdjList[track[i]]、Train[tmp]、StartTime / 60, AdjList[track[i]]、Train[tmp]、StartTime % 60, AdjList[track[i]]、Train[tmp]、StopTime / 60, AdjList[track[i]]、Train[tmp]、StopTime % 60);
ﻩ}
}
ﻩelse
{
for (i-—; i>0; i--)
ﻩ {
ﻩﻩ printf(”\n%s:", CityName[track[i]]);
ﻩ end = track[i — 1]; min = 32767;
ﻩﻩfor (k = 0; k〈AdjList[track[i]]、FlightNum; k++)
ﻩﻩif (AdjList[track[i]]、Train[k]、EndCity == end&&min>AdjList[track[i]]、Flight[k]、Cost)
{
ﻩ min = AdjList[track[i]]、Flight[k]、Cost;
ﻩﻩﻩﻩtmp = k;
ﻩ}
ﻩ printf(”%s", AdjList[track[i]]、Flight[tmp]、name);
ﻩﻩprintf("%2d:%2d—%2d:%2d", AdjList[track[i]]、Flight[tmp]、StartTime / 60, AdjList[track[i]]、Flight[tmp]、StartTime % 60, AdjList[track[i]]、Flight[tmp]、StopTime / 60, AdjList[track[i]]、Flight[tmp]、StopTime % 60);
ﻩﻩ}
}
printf(”\n%s: DESTINATION!”, CityName[track[0]]);
printf("\nMin Cost : %d\n”, cost);
}
void Dijkstra(int matx[Dij_MAXN][Dij_MAXN], int p_start, int p_end, int TravelType)
{
ﻩint PreCity[Dij_MAXN]; //PreCity[i]==-1,never used;
ﻩ//PreCity>0,the precity of City i
int i, j, min, pre, pos;
ﻩfor (i = 0; i<CityNum; i++)
{
ﻩﻩPreCity[i] = -1;
ﻩ}
ﻩPreCity[p_start] = —2;
while (PreCity[p_end] == -1)
{
ﻩmin = —1;
ﻩﻩfor (i = 0; i<CityNum; i++)
ﻩ if (PreCity[i] != -1)
ﻩ {
ﻩﻩ for (j = 0; j<CityNum; j++)
if (PreCity[j] == -1 && matx[i][j]>0 && (min<0 || matx[i][j]<min))
ﻩ {
ﻩ pre = i; pos = j; min = matx[i][j];
ﻩﻩﻩ}
ﻩ}
PreCity[pos] = pre;
ﻩ}
ﻩDijkstra_Output(matx, PreCity, p_end, TravelType);
}
五、测试分析
1、 添加城市
在主菜单下,用户输入1,添加城市名称。
ﻩ(图2、4添加城市)
2.删除城市
在主菜单下,用户输入2,删除已添加城市名称.
ﻩﻩ (图2、5删除城市)
3.添加交通路线
在主菜单下,用户输入3,已添加城市名称。添加起始城市、终点城市名称、乘车类型、乘车班次、起始时刻、终点时刻、与票价。
ﻩ (图2、6添加交通路线)
4.删除交通路线
输入班次号,删除交通路线
ﻩﻩ (图2、7删除交通路线)
5。查询最小费用交通路线
ﻩﻩﻩ(图2、8 查询最小费用交通路线)
6。查询最快交通路线
ﻩ (图2、9查询最快交通路线)
7。清除屏幕
8.退出
六、用户手册
使用本系统时,用户需先向程序添加城市后,在已有城市基础上添加已有城市得路线与使用各项功能。
七、调试报告
程序运行无错误,但当系统输入其她无储存内容时程序会意外中断,代码需要优化。
八、程序清单
#include ”stdafx、h”
#include <stdio、h>
#include 〈string、h>
#include <stdlib、h>
#define ERR 0
#define OK 1
#define Dij_MAXN 100
#define MAX_VERTEX_NUM 100
#define MAX_STRING_NUM 100
#define MAX_TRAFFIC_NUM 100
const char CityFile[] = "city、txt";
const char TrainFile[] = "train、txt";
const char FlightFile[] = ”flight、txt”;
typedef short int CityType;//CityType 定义短整形得变量
typedef struct TrafficNode
{
char name[MAX_STRING_NUM]; //班次 //MAX_STRING_NUM最为10
int StartTime, StopTime; //起止时间
ﻩint EndCity; //该有向边指向得顶点在数组中得位置,即该城市编号
int Cost; //票价
} TrafficNodeDat;
typedef struct VNode
{
ﻩCityType city;
ﻩint TrainNum, FlightNum; //标记下面Train数组与Flight数组里元素个数
ﻩTrafficNodeDat Train[MAX_TRAFFIC_NUM]; //数组成员为结构体,记录了到达城市、起止时间、票价与班次
ﻩTrafficNodeDat Flight[MAX_TRAFFIC_NUM];
// int Cost; //遍历时到达该城市得耗费(时间或者费用)
} VNodeDat;
typedef struct PNode
{
int City;
ﻩint TraNo;
} PNodeDat;
VNodeDat AdjList[MAX_VERTEX_NUM];
char CityName[MAX_VERTEX_NUM][MAX_STRING_NUM]; //城市名,采用第一下标为该城市在本程序中得编号
int CityNum; //城市数目
PNodeDat Path[MAX_VERTEX_NUM]; //存储临时最小时间路径
PNodeDat MinPath[MAX_VERTEX_NUM]; //存储搜索到当前得最小时间路径
int MinTime, StartTime;
int curPath;
int ShowMenu()
{
printf("\n|******************欢迎使用交通咨询系统*******|\n");
printf(”\n|-—----—---—-——————1: 添加城市---————-——---—-—|");
ﻩprintf("\n|-——-—-—-—-——-—-——-2: 删除城市----———--------—|");
printf(”\n|—--——----—--—--—-—3: 添加交通路线--—-——-—-——-|");
printf("\n|—--——---—-——------4: 删除交通路线-——--------—|”);
printf("\n|—-—-————------—-—-5: 查询最小费用路线——--—---|");
printf("\n|—-----—-—-——-—-———6: 查询最快路线--------—-——|");
printf("\n|——-—----—-—---———-7: 清除屏幕------—----——---|");
ﻩprintf(”\n|--—-—————-—-—-———-0: 退出----—--—--------—--—|\n");
ﻩprintf("\n|***********o(∩_∩)o o(∩_∩)o **************|\n");
ﻩprintf(”\n请输入您得选择:");
return 1;
}
void CopyRight()
{
ﻩprintf("\n”);
}
int SeekCity(char *name) //寻找城市
{
ﻩint i;
for (i = 0; i〈CityNum; i++)
ﻩ{
if (strcmp(name, CityName[i]) == 0) //比较函数,若相等,则返回i值
ﻩ {
ﻩ return i;
ﻩ}
}
ﻩreturn -1;
}
//=============================================Edit Info====================================================
int SaveSysInfo() //向程序输入数据
{
FILE *fp; int i, j, total;
fp = fopen(CityFile, "w"); //打开CityFile文档
fprintf(fp, "%d\n”, CityNum); //往文档中写城市得数量
ﻩfor (i = 0; i<CityNum; i++)
{
ﻩfprintf(fp, "%s\n”, CityName[i]); //往文档中写城市得名字
ﻩ}
ﻩfclose(fp);//将CityFile文档关闭
ﻩtotal = 0;
fp = fopen(TrainFile, "w”);//打开TrainFile文档
ﻩfor (i = 0; i<CityNum; i++) //计算列车班次得数量
ﻩ{
ﻩtotal += AdjList[i]、TrainNum;
}
ﻩfprintf(fp, ”%d\n", total); //往文档中写列车班次得数量
ﻩfor (i = 0; i〈CityNum; i++) //
ﻩ{
ﻩfor (j = 0; j〈AdjList[i]、TrainNum; j++) //往文档中写列车得车次、始发城市、终点城市
ﻩ {
ﻩ fprintf(fp, ”%s %s %s ", AdjList[i]、Train[j]、name,
ﻩCityName[i],
ﻩ CityName[AdjList[i]、Train[j]、EndCity]);
ﻩﻩ fprintf(fp, "%2d:%2d %2d:%2d %d\n”, AdjList[i]、Train[j]、StartTime / 60, //往文档中写
ﻩﻩ ﻩAdjList[i]、Train[j]、StartTime % 60,
ﻩﻩﻩ AdjList[i]、Train[j]、StopTime / 60,
ﻩ ﻩAdjList[i]、Train[j]、StopTime % 60,
ﻩ AdjList[i]、Train[j]、Cost);
ﻩ}
}
ﻩfclose(fp); total = 0;
fp = fopen(FlightFile, "w”);
for (i = 0; i<CityNum; i++)
{
ﻩﻩtotal += AdjList[i]、FlightNum;
ﻩ}
ﻩfprintf(fp, ”%d\n”, total);
for (i = 0; i〈CityNum; i++)
ﻩ{
ﻩfor (j = 0; j〈AdjList[i]、FlightNum; j++)
ﻩ{
fprintf(fp, "%s %s %s ”, AdjList[i]、Flight[j]、name,
ﻩ ﻩCityName[i],
ﻩﻩﻩﻩCityName[AdjList[i]、Flight[j]、EndCity]);
ﻩﻩfprintf(fp, "%2d:%2d %2d:%2d %d\n", AdjList[i]、Flight[j]、StartTime / 60,
ﻩﻩ AdjList[i]、Flight[j]、StartTime % 60,
ﻩﻩﻩ AdjList[i]、Flight[j]、StopTime / 60,
ﻩ ﻩAdjList[i]、Flight[j]、StopTime % 60,
ﻩ ﻩAdjList[i]、Flight[j]、Cost);
ﻩﻩ}
}
ﻩfclose(fp); return 1;
}
int InsertCity(char *Name) //添加城市
{
strcpy(CityName[CityNum], Name);
ﻩAdjList[CityNum]、city = CityNum;
AdjList[CityNum]、FlightNum = 0;
AdjList[CityNum]、TrainNum = 0;
CityNum++;
ﻩreturn 1;
}
int DelCity(char *Name) //删除城市
{
int city, i, j,o=1,k=1;
ﻩcity = SeekCity(Name);
printf("%s",Name);
ﻩwhile (true)
ﻩ{
ﻩ while (CityName[k] != Name)
ﻩ {
k++;
}
ﻩﻩif (k 〉 CityNum)
ﻩ{
ﻩ o-—;
ﻩprintf("未找到此城市,请重新输入!");
ﻩﻩreturn 0;
}
ﻩ for (i = city; i < CityNum — 1; i++) //???可能city就是从0开始得
ﻩ{
ﻩ strcpy(CityName[i], CityName[i + 1]);
AdjList[i]、FlightNum = AdjList[i + 1]、FlightNum;
ﻩﻩﻩAdjList[i]、TrainNum = AdjList[i + 1]、TrainNum;
ﻩﻩﻩfor (j = 0; j < AdjList[i]、FlightNum; j++) //为什么没有火车得??
ﻩﻩ {
ﻩ ﻩﻩAdjList[i]、Flight[j]、Cost = AdjList[i + 1]、Flight[j]、Cost;
ﻩ ﻩﻩAdjList[i]、Flight[j]、EndCity = AdjList[i + 1]、Flight[j]、EndCity;
ﻩﻩ ﻩstrcpy(AdjList[i]、Flight[j]、name, AdjList[i + 1]、Flight[j]、name);
ﻩﻩﻩﻩAdjList[i]、Flight[j]、StartTime = AdjList[i + 1]、Flight[j]、StartTime;
ﻩﻩﻩ AdjList[i]、Flight[j]、StopTime = AdjList[i + 1]、Flight[j]、StopTime;
ﻩﻩ }
ﻩﻩ}
ﻩCityNum-—;
ﻩ}
return 1;
}
int InsertTrain(char *train, char *StartCity, char *EndCity, int StartTime, int EndTime, int cost)
{
ﻩint i, j; //InsertTrain(name,s_city,e_city,s_hour*60+s_minute,e_hour*60+e_minute,cost);
i = SeekCity(StartCity);
j = SeekCity(EndCity);
AdjList[i]、Train[AdjList[i]、TrainNum]、Cost = cost;
AdjList[i]、Train[AdjList[i]、TrainNum]、EndCity = j;
ﻩAdjList[i]、Train[AdjList[i]、TrainNum]、StartTime = StartTime;
AdjList[i]、Train[AdjList[i]、TrainNum]、StopTime = EndTime;
ﻩstrcpy(AdjList[i]、Train[AdjList[i]、TrainNum]、name, train);
AdjList[i]、TrainNum++; //火车得数加1
return 1;
}
int InsertFlight(char *flight, char *StartCity, char *EndCity, int StartTime, int EndTime, int cost)
{
ﻩint i, j;
i = SeekCity(StartCity);
j = SeekCity(EndCity);
AdjList[i]、Flight[AdjList[i]、FlightNum]、Cost = cost;
ﻩAdjList[i]、Flight[AdjList[i]、FlightNum]、EndCity = j;
ﻩAdjList[i]、Flight[AdjList[i]、FlightNum]、StartTime = StartTime;
AdjList[i]、Flight[AdjList[i]、FlightNum]、StopTime = EndTime;
ﻩstrcpy(AdjList[i]、Train[AdjList[i]、FlightNum]、name, flight);
ﻩAdjList[i]、FlightNum++;
return 1;
}
int DelPath(char *name)
{
ﻩint i, j, flag = 0;
ﻩfor (i = 0; i<CityNum; i++)
{
ﻩfor (j = 0; j〈AdjList[i]、FlightNum; j++) //注意j就是从0开始得
ﻩﻩif (strcmp(AdjList[i]、Flight[j]、name, name) == 0)
ﻩﻩ{
ﻩﻩflag = 1; break;
ﻩ}
ﻩif (flag)
{
ﻩ for (; j<AdjList[i]、FlightNum — 1; j++) //把删除得航班后得每个航班向前移一位
ﻩﻩ {
ﻩ AdjList[i]、Flight[j]、Cost = AdjList[i]、Flight[j + 1]、Cost;
ﻩﻩ AdjList[i]、Flight[j]、EndCity = AdjList[i]、Flight[j + 1]、EndCity;
ﻩﻩﻩstrcpy(AdjList[i]、Flight[j]、name, AdjList[i]、Flight[j + 1]、name);
ﻩﻩﻩ AdjList[i]、Flight[j]、StartTime = AdjList[i]、Flight[j + 1]、StartTime;
ﻩﻩ AdjList[i]、Flight[j]、StopTime = AdjList[i]、Flight[j + 1]、StopTime;
ﻩﻩ}
ﻩAdjList[i]、FlightNum—-; break;
ﻩ}
for (j = 0; j<AdjList[i]、TrainNum; j++)
ﻩﻩif (strcmp(AdjList[i]、Train[j]、name, name) == 0)
ﻩ {
ﻩﻩflag = 1; break;
ﻩ }
ﻩ if (flag)
{
ﻩﻩfor (; j<AdjList[i]、TrainNum - 1; j++) //把删除得列车后得每个列车车次都前移一位
{
ﻩﻩﻩﻩAdjList[i]、Train[j]、Cost = AdjList[i]、Train[j + 1]、Cost;
ﻩ ﻩ AdjList[i]、Train[j]、EndCity = AdjList[i]、Train[j + 1]、EndCity;
ﻩ ﻩstrcpy(AdjList[i]、Train[j]、name, AdjList[i]、Train[j + 1]、name);
ﻩﻩ AdjList[i]、Train[j]、StartTime = AdjList[i]、Train[j + 1]、StartTime;
ﻩﻩ AdjList[i]、Train[j]、StopTime = AdjList[i]、Train[j + 1]、StopTime;
}
ﻩ AdjList[i]、TrainNum—-; break;
ﻩﻩ}
}
ﻩreturn 1;
}
//==============================================Check Info================================================
void Dijkstra_Output(int matx[Dij_MAXN][Dij_MAXN], int PreCity[Dij_MAXN], int p_end, int TravelType)
{
ﻩint track[Dij_MAXN];
ﻩint i = 0, j, k, min, tmp, end, cost = 0;
j = p_end; track[i++] = j;
while (PreCity[j] 〉= 0)
{
ﻩﻩcost += matx[PreCity[j]][j];
ﻩ track[i++] = j = PreCity[j];
}
printf("\nTrack Way:");
if (!TravelType)
ﻩ{
ﻩ for (i——; i〉0; i--)
ﻩﻩ{
ﻩ ﻩprintf(”\n%s:", CityName[track[i]]);
ﻩﻩﻩend = track[i - 1]; min = 32767;
ﻩ ﻩfor (k = 0; k〈AdjList[track[i]]、TrainNum; k++)
if (AdjList[track[i]]、Train[k]、EndCity == end&&min〉AdjList[track[i]]、Train[k]、Cost)
ﻩ {
ﻩﻩ min = AdjList[track[i]]、Train[k]、Cost;
ﻩtmp = k;
ﻩ }
ﻩ printf(”%s”, AdjList[track[i]]、Train[tmp]、name);
ﻩ printf("%2d:%2d-%2d:%2d", AdjList[track[i]]、Train[tmp]、StartTime / 60, AdjList[track[i]]、Train[tmp]、StartTime % 60, AdjList[track[i]]、Train[tmp]、StopTime / 60, AdjList[track[i]]、Train[tmp]、StopTime % 60);
ﻩ}
}
ﻩelse
ﻩ{
for (i——; i>0; i--)
ﻩﻩ{
ﻩ printf("\n%s:", CityName[track[i]]);
ﻩﻩend = track[i — 1]; min = 32767;
ﻩﻩﻩfor (k = 0; k<AdjList[track[i]]、FlightNum; k++)
ﻩ if (AdjList[track[i]]、Train[k]、EndCity == end&&min〉AdjList[track[i]]、Flight[k]、Cost)
ﻩﻩ{
ﻩﻩmin = AdjList[track[i]]、Flight[k]、Cost;
ﻩ ﻩﻩtmp = k;
}
ﻩ printf(”%s", AdjList[track[i]]、Flight[tmp]、name);
ﻩ printf("%2d:%2d—%2d:%2d”, AdjList[track[i]]、Flight[tmp]、StartTime / 60, AdjList[track[i]]、Flight[tmp]、StartTime % 60, AdjList[track[i]]、Flight[tmp]、StopTime / 60, AdjList[track[i]]、Flight[tmp]、StopTime % 60);
}
}
printf("\n%s: DESTINATION!”, CityName[track[0]]);
printf(”\nMin Cost : %d\n", cost
展开阅读全文