![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計交通咨詢系統(tǒng)設(shè)計模板_第1頁](http://file4.renrendoc.com/view8/M00/35/15/wKhkGWbBOn6AB-_bAABx93CGNG0397.jpg)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計交通咨詢系統(tǒng)設(shè)計模板_第2頁](http://file4.renrendoc.com/view8/M00/35/15/wKhkGWbBOn6AB-_bAABx93CGNG03972.jpg)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計交通咨詢系統(tǒng)設(shè)計模板_第3頁](http://file4.renrendoc.com/view8/M00/35/15/wKhkGWbBOn6AB-_bAABx93CGNG03973.jpg)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計交通咨詢系統(tǒng)設(shè)計模板_第4頁](http://file4.renrendoc.com/view8/M00/35/15/wKhkGWbBOn6AB-_bAABx93CGNG03974.jpg)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計交通咨詢系統(tǒng)設(shè)計模板_第5頁](http://file4.renrendoc.com/view8/M00/35/15/wKhkGWbBOn6AB-_bAABx93CGNG03975.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計交通咨詢系統(tǒng)設(shè)計設(shè)計題目<二>:7.3.4交通咨詢系統(tǒng)設(shè)計P160一、設(shè)計要求1.問題描述 根據(jù)不同目的的旅客對交通工具有不同的要求。例如,因公出差的旅客希望在旅途中的時間盡可能的短,出門旅行的旅客希望旅費盡可能的少,而老年人則要求中轉(zhuǎn)次數(shù)少。模擬一個全國城市之間的咨詢交通程序,為旅客提供兩種或三種最優(yōu)的交通路線。2.需求分析二、概要設(shè)計1.主界面設(shè)計 (圖2.1”交通咨詢系統(tǒng)”主菜單)2.存儲結(jié)構(gòu)設(shè)計本系統(tǒng)采用圖結(jié)構(gòu)類型存儲抽象交通咨詢系統(tǒng)的信息。typedefstructTrafficNode{ charname[MAX_STRING_NUM];//班次//MAX_STRING_NUM最為10 intStartTime,StopTime;//起止時間 intEndCity;//該有向邊指向的頂點在數(shù)組中的位置,即該城市編號 intCost;//票價}TrafficNodeDat;typedefstructVNode{ CityTypecity; intTrainNum,FlightNum;//標記下面Train數(shù)組和Flight數(shù)組里元素個數(shù) TrafficNodeDatTrain[MAX_TRAFFIC_NUM];//數(shù)組成員為結(jié)構(gòu)體,記錄了到達城市、起止時間、票價和班次 TrafficNodeDatFlight[MAX_TRAFFIC_NUM]; //intCost;//遍歷時到達該城市的耗費(時間或者費用)}VNodeDat;typedefstructPNode{ intCity; intTraNo;}PNodeDat;3.系統(tǒng)功能設(shè)計(1)添加城市。添加一個城市的名稱(2)刪除城市。輸入一個城市名稱,刪除該城市。(3)添加交通路線。輸入起始城市、終點城市、航班或火車、車次、起始時間、終點時間和票價(4)刪除交通路線。輸入火車或飛機的班次刪除該交通路線。(5)查詢最小費用路線。輸入起始城市、終點城市、航班或火車、車次、起始時間、終點時間查詢最小費用路線。三、模塊設(shè)計1.模塊設(shè)計無向網(wǎng)操作模塊工作區(qū)模塊主程序模塊無向網(wǎng)操作模塊工作區(qū)模塊主程序模塊 (圖2.2模塊調(diào)用示意圖)2.系統(tǒng)子程序及功能設(shè)計(1)intShowMenu()//主菜單(2)voidCopyRight()(3)intSeekCity(char*name)//尋找城市(4)intInsertCity(char*Name)//添加城市(5)intSaveSysInfo()//向程序輸入數(shù)據(jù)(6)intDelCity(char*Name)//刪除城市(7)intInsertTrain(char*train,char*StartCity,char*EndCity,intStartTime,intEndTime,intcost)//添加火車路線(8)intInsertFlight(char*flight,char*StartCity,char*EndCity,intStartTime,intEndTime,intcost)//添加飛機航線(9)intDelPath(char*name)//刪除路線(10)voidDijkstra(intmatx[Dij_MAXN][Dij_MAXN],intp_start,intp_end,intTravelType)(11)intInitSysData()//存儲數(shù)據(jù)(12)intSearchMinTime(CityTypeCity,CityTypeEndCity,intCurTime,intcurPathNo,intTravelType)//查詢最短時間(13)intCalcMinTime(intStartCity,intEndCity,intTravelType)//顯示最短時間(14)intCalcMinCost(intStartCity,intEndCity,intTravelType)//最少花費(15)intmain()//主函數(shù)3.函數(shù)主要調(diào)用關(guān)系圖15main()15main()89112754136361223716 (圖2.3函數(shù)主要調(diào)用關(guān)系圖)四、詳細設(shè)計1.數(shù)據(jù)類型定義(1)全局變量的定義typedefshortintCityType;//CityType定義短整形的變量typedefstructTrafficNode{ charname[MAX_STRING_NUM];//班次//MAX_STRING_NUM最為10 intStartTime,StopTime;//起止時間 intEndCity;//該有向邊指向的頂點在數(shù)組中的位置,即該城市編號 intCost;//票價}TrafficNodeDat;typedefstructVNode{ CityTypecity; intTrainNum,FlightNum;//標記下面Train數(shù)組和Flight數(shù)組里元素個數(shù) TrafficNodeDatTrain[MAX_TRAFFIC_NUM];//數(shù)組成員為結(jié)構(gòu)體,記錄了到達城市、起止時間、票價和班次 TrafficNodeDatFlight[MAX_TRAFFIC_NUM]; //intCost;//遍歷時到達該城市的耗費(時間或者費用)}VNodeDat;typedefstructPNode{ intCity; intTraNo;}PNodeDat;2.系統(tǒng)主要子程序詳細設(shè)計(1)用戶工作區(qū)模塊的設(shè)計intShowMenu(){ printf("\n|******************歡迎使用交通咨詢系統(tǒng)*******|\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(∩_∩)oo(∩_∩)o**************|\n"); printf("\n請輸入你的選擇:"); return1;}(2)用Dijkstra算法求兩段路程的最短距離voidDijkstra_Output(intmatx[Dij_MAXN][Dij_MAXN],intPreCity[Dij_MAXN],intp_end,intTravelType){ inttrack[Dij_MAXN]; inti=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("\nTrackWay:"); 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("\nMinCost:%d\n",cost);}voidDijkstra(intmatx[Dij_MAXN][Dij_MAXN],intp_start,intp_end,intTravelType){ intPreCity[Dij_MAXN];//PreCity[i]==-1,neverused; //PreCity>0,theprecityofCityi inti,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.退出六、用戶手冊使用本系統(tǒng)時,用戶需先向程序添加城市后,在已有城市基礎(chǔ)上添加已有城市的路線和使用各項功能。七、調(diào)試報告程序運行無錯誤,但當系統(tǒng)輸入其它無儲存內(nèi)容時程序會意外中斷,代碼需要優(yōu)化。八、程序清單#include"stdafx.h"#include<stdio.h>#include<string.h>#include<stdlib.h>#defineERR0#defineOK1#defineDij_MAXN100#defineMAX_VERTEX_NUM100#defineMAX_STRING_NUM100#defineMAX_TRAFFIC_NUM100constcharCityFile[]="city.txt";constcharTrainFile[]="train.txt";constcharFlightFile[]="flight.txt";typedefshortintCityType;//CityType定義短整形的變量typedefstructTrafficNode{ charname[MAX_STRING_NUM];//班次//MAX_STRING_NUM最為10 intStartTime,StopTime;//起止時間 intEndCity;//該有向邊指向的頂點在數(shù)組中的位置,即該城市編號 intCost;//票價}TrafficNodeDat;typedefstructVNode{ CityTypecity; intTrainNum,FlightNum;//標記下面Train數(shù)組和Flight數(shù)組里元素個數(shù) TrafficNodeDatTrain[MAX_TRAFFIC_NUM];//數(shù)組成員為結(jié)構(gòu)體,記錄了到達城市、起止時間、票價和班次 TrafficNodeDatFlight[MAX_TRAFFIC_NUM]; //intCost;//遍歷時到達該城市的耗費(時間或者費用)}VNodeDat;typedefstructPNode{ intCity; intTraNo;}PNodeDat;VNodeDatAdjList[MAX_VERTEX_NUM];charCityName[MAX_VERTEX_NUM][MAX_STRING_NUM];//城市名,采用第一下標為該城市在本程序中的編號intCityNum;//城市數(shù)目PNodeDatPath[MAX_VERTEX_NUM];//存儲臨時最小時間路徑PNodeDatMinPath[MAX_VERTEX_NUM];//存儲搜索到當前的最小時間路徑intMinTime,StartTime;intcurPath;intShowMenu(){ printf("\n|******************歡迎使用交通咨詢系統(tǒng)*******|\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(∩_∩)oo(∩_∩)o**************|\n"); printf("\n請輸入你的選擇:"); return1;}voidCopyRight(){ printf("\n");}intSeekCity(char*name)//尋找城市{ inti; for(i=0;i<CityNum;i++) { if(strcmp(name,CityName[i])==0)//比較函數(shù),若相等,則返回i值 { returni; } } return-1;}//=============================================EditInfo====================================================intSaveSysInfo()//向程序輸入數(shù)據(jù){ FILE*fp;inti,j,total; fp=fopen(CityFile,"w");//打開CityFile文檔 fprintf(fp,"%d\n",CityNum);//往文檔中寫城市的數(shù)量 for(i=0;i<CityNum;i++) { fprintf(fp,"%s\n",CityName[i]);//往文檔中寫城市的名字 } fclose(fp);//將CityFile文檔關(guān)閉 total=0; fp=fopen(TrainFile,"w");//打開TrainFile文檔 for(i=0;i<CityNum;i++)//計算列車班次的數(shù)量 { total+=AdjList[i].TrainNum; } fprintf(fp,"%d\n",total);//往文檔中寫列車班次的數(shù)量 for(i=0;i<CityNum;i++)// { for(j=0;j<AdjList[i].TrainNum;j++)//往文檔中寫列車的車次、始發(fā)城市、終點城市 { 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);return1;}intInsertCity(char*Name)//添加城市{ strcpy(CityName[CityNum],Name); AdjList[CityNum].city=CityNum; AdjList[CityNum].FlightNum=0; AdjList[CityNum].TrainNum=0; CityNum++; return1;}intDelCity(char*Name)//刪除城市{ intcity,i,j,o=1,k=1; city=SeekCity(Name); printf("%s",Name); while(true) { while(CityName[k]!=Name) { k++; } if(k>CityNum) { o--; printf("未找到此城市,請重新輸入!"); return0; } 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--; } return1;}intInsertTrain(char*train,char*StartCity,char*EndCity,intStartTime,intEndTime,intcost){ inti,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++;//火車的數(shù)加1 return1;}intInsertFlight(char*flight,char*StartCity,char*EndCity,intStartTime,intEndTime,intcost){ inti,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++; return1;}intDelPath(char*name){ inti,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; } } return1;}//==============================================CheckInfo================================================voidDijkstra_Output(intmatx[Dij_MAXN][Dij_MAXN],intPreCity[Dij_MAXN],intp_end,intTravelType){ inttrack[Dij_MAXN]; inti=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("\nTrackWay:"); 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("\nMinCost:%d\n",cost);}voidDijkstra(intmatx[Dij_MAXN][Dij_MAXN],intp_start,intp_end,intTravelType){ intPreCity[Dij_MAXN];//PreCity[i]==-1,neverused; //PreCity>0,theprecityofCityi inti,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);}intInitSysData(){ FILE*fp; inti,j,hour,minute,num,cost; charstmp1[MAX_STRING_NUM]; charstmp2[MAX_STRING_NUM]; charstmp3[MAX_STRING_NUM]; fp=fopen(CityFile,"r"); if(!fp) { printf("\nError:CannotOpenCityFile...\n"); return-1; } fscanf(fp,"%d",&CityNum); for(i=0;i<CityNum;i++) { fscanf(fp,"%s",&CityName[i]); AdjList[i].city=i; AdjList[i].TrainNum=0; AdjList[i].FlightNum=0; } fclose(fp); fp=fopen(TrainFile,"r"); if(!fp) { printf("\nError:CannotOpenTrainFile...\n"); return-1; } fscanf(fp,"%d",&num); for(i=0;i<num;i++) { fscanf(fp,"%s",&stmp1);//列車的車次 fscanf(fp,"%s",&stmp2);//列車的始發(fā)站 fscanf(fp,"%s",&stmp3);//列車的終點站 j=SeekCity(stmp2); AdjList[j].Train[AdjList[j].TrainNum].EndCity=SeekCity(stmp3);//將列車的車次、始發(fā)站、終點站、出發(fā)時間、到達時間讀出 strcpy(AdjList[j].Train[AdjList[j].TrainNum].name,stmp1); fscanf(fp,"%d:%d",&hour,&minute); AdjList[j].Train[AdjList[j].TrainNum].StartTime=hour*60+minute; fscanf(fp,"%d:%d",&hour,&minute); AdjList[j].Train[AdjList[j].TrainNum].StopTime=hour*60+minute; fscanf(fp,"%d",&cost); AdjList[j].Train[AdjList[j].TrainNum].Cost=cost; AdjList[j].TrainNum++; } fclose(fp); fp=fopen(FlightFile,"r"); if(!fp) { printf("\nError:CannotOpenFlightFile...\n"); return-1; } fscanf(fp,"%d",&num); for(i=0;i<num;i++) { fscanf(fp,"%s",&stmp1);//飛機的車次 fscanf(fp,"%s",&stmp2);//飛機的始發(fā)站 fscanf(fp,"%s",&stmp3);//飛機的終點站 j=SeekCity(stmp2); AdjList[j].Flight[AdjList[j].FlightNum].EndCity=SeekCity(stmp3); strcpy(AdjList[j].Flight[AdjList[j].FlightNum].name,stmp1); fscanf(fp,"%d:%d",&hour,&minute); AdjList[j].Flight[AdjList[j].FlightNum].StartTime=hour*60+minute; fscanf(fp,"%d:%d",&hour,&minute); AdjList[j].Flight[AdjList[j].FlightNum].StopTime=hour*60+minute; fscanf(fp,"%d",&cost); AdjList[j].Flight[AdjList[j].FlightNum].Cost=cost; AdjList[j].FlightNum++; } fclose(fp);return1;}intSearchMinTime(CityTypeCity,CityTypeEndCity,intCurTime,intcurPathNo,intTravelType){//CityType是一種短整形函數(shù),SearchMinTime共有5個參數(shù) inti; if(City==EndCity) { if(MinTime>CurTime-StartTime) { for(i=0;i<=curPathNo;i++) { MinPath[i].City=Path[i].City; MinPath[i].TraNo=Path[i].TraNo; curPath=curPathNo; } MinTime=CurTime-StartTime; } } else { curPathNo++; Path[curPathNo].City=City; if(!TravelType) { for(i=0;i<AdjList[City].TrainNum;i++) { if((AdjList[City].Train[i].StartTime>=(CurTime%1440))&&(AdjList[City].Train[i].StopTime+(CurTime/1440)*1440-StartTime<MinTime)) { Path[curPathNo].TraNo=i; SearchMinTime(AdjList[City].Train[i].EndCity,EndCity,AdjList[City].Train[i].StopTime+(CurTime/1440)*1440,curPathNo,TravelType); } if((AdjList[City].Train[i].StartTime<(CurTime%1440))&&(AdjList[City].Train[i].StopTime+(CurTime/1440)*1440-StartTime<MinTime)) { Path[curPathNo].TraNo=i; SearchMinTime(AdjList[City].Train[i].EndCity,EndCity,AdjList[City].Train[i].StopTime+(CurTime/1440+1)*1440,curPathNo,TravelType); } } } else { for(i=0;i<AdjList[City].FlightNum;i++) { if((AdjList[City].Flight[i].StartTime>=CurTime)&&(AdjList[City].Flight[i].StopTime+(CurTime/1440)*1440-StartTime<MinTime)) { Path[curPathNo].TraNo=i; SearchMinTime(AdjList[City].Flight[i].EndCity,EndCity,AdjList[City].Flight[i].StopTime+(CurTime/1440)*1440,curPathNo,TravelType); } if((AdjList[City].Flight[i].StartTime<CurTime)&&(AdjList[City].Flight[i].StopTime+(CurTime/1440)*1440-StartTime<MinTime)) { Path[curPathNo].TraNo=i; SearchMinTime(AdjList[City].Flight[i].EndCity,EndCity,AdjList[City].Flight[i].StopTime+(CurTime/1440+1)*1440,curPathNo,TravelType); } } } } return1;}intCalcMinTime(intStartCity,intEndCity,intTravelType){ inti; MinTime=32767;curPath=0; Path[0].City=StartCity; if(!TravelType) { for(i=0;i<AdjList[StartCity].TrainNum;i++) { Path[0].TraNo=i; StartTime=AdjList[StartCity].Train[i].StartTime; SearchMinTime(AdjList[StartCity].Train[i].EndCity,EndCity,AdjList[StartCity].Train[i].StopTime,0,TravelType); } } else { for(i=0;i<AdjList[StartCity].FlightNum;i++) { Path[0].TraNo=i; StartTime=AdjList[StartCity].Flight[i].StartTime; SearchMinTime(AdjList[StartCity].Flight[i].EndCity,EndCity,AdjList[StartCity].Flight[i].StopTime,0,TravelType); } } if(MinTime==32767) { printf("\nNoaccesstothatdestination!"); return0; } //if(!TravelType) //StartTime=AdjList[StartCity].Train[MinPath[0].TraNo].StartTime; //else //StartTime=AdjList[StartCity].Flight[MinPath[0].TraNo].StartTime; printf("\nPath:\n"); for(i=0;i<=curPath;i++) { if(!TravelType) printf("%s:%s",CityName[MinPath[i].City],AdjList[MinPath[i].City].Train[MinPath[i].TraNo].name); else printf("%s:%s",CityName[MinPath[i].City],AdjList[MinPath[i].City].Flight[MinPath[i].TraNo].name); printf("%2d:%2d-%2d:%2d\n",AdjList[MinPath[i].City].Train[MinPath[i].TraNo].StartTime/60,AdjList[MinPath[i].City].Train[MinPath[i].TraNo].StartTime%60,AdjList[MinPath[i].City].Train[MinPath[i].TraNo].StopTime/60,AdjList[MinPath[i].City].Train[MinPath[i].TraNo].StopTime%60); } printf("%s:DESTINATION!",CityName[EndCity]); printf("\nTimeCost:%2d:%2d",MinTime/60,MinTime%60); return1;}intCalcMinCost(intStartCity,intEndCity,intTravelType){ intma[Dij_MAXN][Dij_MAXN]; inti,j,min,end; for(i=0;i<CityNum;i++) for(j=0;j<CityNum;j++) ma[i][j]=-1; if(TravelType==0) { for(i=0;i<CityNum;i++) { min=32767;j=0; while(j<AdjList[i].TrainNum) { min=32767; end=AdjList[i].Train[j].EndCity; while(end==AdjList[i].Train[j].EndCity&&j<AdjList[i].TrainNum) { if(AdjList[i].Train[j].Cost<min) { min=AdjList[i].Train[j].Cost; } j++; } ma[i][end]=min; } } } else { for(i=0;i<CityNum;i++) { min=32767;j=0; while(j<AdjList[i].FlightNum) { min=32767; end=AdjList[i].Flight[j].EndCity; while(end==AdjList[i].Flight[j].EndCity&&j<AdjList[i].FlightNum) { if(AdjList[i].Flight[j].Cost<min) { min=AdjList[i].Flight[j].Cost; } j++; } ma[i][end]=min; } } } Dijkstra(ma,StartCity,EndCity,TravelType); return1;}//========================================Main()=================================================intmain(){ charname[MAX_STRING_NUM];//城市名 chars_city[MAX_STRING_NUM];//始發(fā)站 chare_city[MAX_STRING_NUM];//終點站 intCommand,cost; intstartcity,endcity,traveltype; ints_hour,s_minute,e_hour,e_minute; while(1) { CopyRight();//版權(quán)信息 ShowMenu();//主菜單 scanf("%d",&Command);//輸入選擇 switch(Command)//對菜單的內(nèi)容進行選擇 { case0://退出 return0; case1://添加城市 InitSysData();
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 芽孢桿菌吸附及誘導礦化稀土離子研究
- 職引未來-涉罪未成年人職業(yè)輔導小組工作介入研究
- 知識產(chǎn)權(quán)拍賣市場的現(xiàn)狀及未來展望
- 現(xiàn)代城市雕塑的可持續(xù)發(fā)展思考與實踐
- 電子商務(wù)與現(xiàn)代物流的整合研究
- 國家勵志獎金申請書
- 知識產(chǎn)權(quán)商業(yè)化運用策略概述
- 電影產(chǎn)業(yè)中的教育創(chuàng)新與啟示
- 電力企業(yè)中電氣設(shè)備預防性維護策略研究報告
- 電子競技產(chǎn)業(yè)對醫(yī)療健康行業(yè)的促進作用
- 住院精神疾病患者自殺風險護理
- 2024義務(wù)教育道德與法治課程標準(2022版)
- 浙江省大學生職業(yè)生涯規(guī)劃大賽賽前輔導課件
- 部編四下語文《口語交際:轉(zhuǎn)述》公開課教案教學設(shè)計【一等獎】
- 倉庫每日巡查制度
- 學校教育數(shù)字化工作先進個人事跡材料
- 2024中國AI應用開發(fā)者生態(tài)調(diào)研報告-易觀分析
- 2024魯教版七年級下冊數(shù)學第七章綜合檢測試卷及答案
- 2024年遼寧醫(yī)藥職業(yè)學院單招職業(yè)適應性測試題庫含答案
- 企事業(yè)單位公建項目物業(yè)管理全套方案
- 《電線電纜介紹》課件
評論
0/150
提交評論