日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

公交管理系统

發布時間:2023/12/15 windows 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 公交管理系统 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這個應用最難的操作是實現換乘,也就是第5步。對于兩個出發站和目的站,有以下幾種情況:①直達;②轉乘若干次到達;③無法到達。因為只考慮換乘次數最少,并沒有考慮走過的距離,以及各站點之間的距離,而且公交車一般都是往返于各站點,那么一條路線上的任意兩站點都是雙向可通的,所以每一條路線都能構成?一個無向完全圖,并且圖的邊權為1(一個站點可能落在不同的無向完全圖中,這樣就能實現轉乘了)。接下來只需要套用Dijkstra最短路徑算法就解決轉乘問題了。

未完善代碼如下(還有些顯示界面沒優化到位,基本實現以上5個功能):

?

#include <stdio.h> #include <string.h> #define INT_Max 0x3f3f3f typedef struct Graph{int Contact[240][240];int NA;int vis[240];int pv[240];int Dis[240];char Matching_name[250][18]; }Graph;Graph G; typedef struct BUS{char id[8];char driver_name[20];int Fare;int begin_time,end_time;int site_amount;int site[25]; }BUS; typedef struct Bus_station{int bus_num;BUS bus[666]; }Bus_station;Bus_station station;int Matching_stop_lo(char *stop_name) {for(int i=0;i<G.NA;i++){if(strcmp(stop_name,G.Matching_name[i])==0)return i;}return -1; }void Query_Bus(char *id) {int index = -1;for(int i=0;i<station.bus_num;i++){if(strcmp(id,station.bus[i].id)==0){index = i;}}printf("%s ",station.bus[index].id);//其他信息1//其他信息1//其他信息1//其他信息1 }void Delete_bus(char *id) {int index = -1;for(int i=0;i<station.bus_num;i++){if(strcmp(id,station.bus[i].id)==0){index = i;}}if(index==-1)return ;for(int j=index;j+1<station.bus_num;j++){station.bus[j] = station.bus[j+1];}station.bus_num--; }BUS Creat_Bus_Route() {BUS bus;printf("請輸入公交車id:");scanf("%s",bus.id);printf("請輸入公交車經過的站點數量:");scanf("%d",&bus.site_amount);printf("請輸入這些站點的名稱(以空格分隔,回車結束):");for(int i=0;i<bus.site_amount;i++){char name[25];scanf("%s",name);bus.site[i] = Matching_stop_lo(name);}printf("已成功創建一條新的線路:");return bus; }/*更新地圖*/ void Update_G() {for(int i=0;i<G.NA;i++){for(int j=0;j<G.NA;j++)G.Contact[i][j]=INT_Max;}for(int i=0;i<G.NA;i++){G.Contact[i][i]=0;G.vis[i]=0;G.pv[i]=i;}for(int i=0;i<station.bus_num;i++){for(int j=0;j<station.bus[i].site_amount;j++){for(int k=1;k<station.bus[i].site_amount;k++){G.Contact[station.bus[i].site[j]][station.bus[i].site[k]]=1;G.Contact[station.bus[i].site[k]][station.bus[i].site[j]]=1;}}} }int Judge_direct(int Starting,int Destination) {if(G.Contact[Starting][Destination]==1){for(int i=0;i<station.bus_num;i++){int flag1=0,flag2=0;for(int j=0;j<station.bus[i].site_amount;j++){if(station.bus[i].site[j]==Starting)flag1=1;if(station.bus[i].site[j]==Destination)flag2=1;}if(flag1&&flag2)return i;}}return -1; }void Dijkstra(int Starting,int Destination) {int n,v,i,w,Min,p;n = G.NA;for(v=0;v<n;v++){G.vis[v]=0;G.Dis[v]=G.Contact[Starting][v];if(G.Dis[v]<INT_Max)G.pv[v]=Starting;else G.pv[v]=v;}G.vis[Starting]=1;G.Dis[Starting]=0;for(i=1;i<n;i++){Min = INT_Max;for(w=0;w<n;w++){if(!G.vis[w]&&G.Dis[w]<Min){v=w;Min = G.Dis[w];}}G.vis[v]=1;for(w=0;w<n;w++){if(!G.vis[w]&&(G.Dis[v]+G.Contact[v][w]<G.Dis[w])){G.Dis[w]=G.Dis[v]+G.Contact[v][w];G.pv[w]=v;}}}printf("%d\n",G.Dis[Destination]);int a[123],index=0;if(G.Dis[w]<INT_Max){p = Destination;while(p!=G.pv[p]){a[index++] = p;//printf("%d ",p);p=G.pv[p];}//printf("%d ",p);a[index++] = p;}for(i=index-1;i>0;i--){printf("從%s乘坐%s路車到%s\n",G.Matching_name[a[i]],station.bus[Judge_direct(a[i],a[i-1])].id,G.Matching_name[a[i-1]]);}printf("按上述路線即可到達目的地\n"); } void MainMenu() {printf("\n\n\n\n ------------歡迎進入乘車系統管理頁面,請選擇要執行的操作------------\n\n\n");printf(" 1 錄入公交路線\n\n");printf(" 2 查詢公交路線\n\n");printf(" 3 刪除公交路線\n\n");printf(" 4 直達乘車查詢\n\n");printf(" 5 公交轉乘查詢\n\n");printf(" 6 統計站點總數\n\n");printf(" 0 退出管理系統\n\n");int op;scanf("%d",&op);if(op==1){printf("請輸入公交路線條數:");scanf("%d",&station.bus_num);for(int i=0;i<station.bus_num;i++){station.bus[i] = Creat_Bus_Route();}Update_G();}if(op==2){char id[25];scanf("%s",id);Query_Bus(id);}if(op==3){char id[25];scanf("%s",id);Delete_bus(id);Update_G();}if(op==4){char name1[25],name2[25];printf("請分別輸入出發站和目的站(以空格分隔,回車結束):");scanf("%s%s",name1,name2);int l1,l2;l1 = Matching_stop_lo(name1);l2 = Matching_stop_lo(name2);if(Judge_direct(l1,l2)!=-1){printf("可以直達\n");}else{printf("不可直達\n");}}if(op==5){char name1[25],name2[25];printf("請分別輸入出發站和目的站(以空格分隔,回車結束):");scanf("%s%s",name1,name2);int l1,l2;l1 = Matching_stop_lo(name1);l2 = Matching_stop_lo(name2);Dijkstra(l1,l2);}if(op==6){printf("請輸入站點總數:");scanf("%d",&G.NA);printf("請輸入各站點名稱(以空格分隔,回車結束):");for(int i=0;i<G.NA;i++){scanf("%s",G.Matching_name[i]);}Update_G();}if(op!=0){MainMenu();} } int main() {MainMenu();return 0; }

總結

以上是生活随笔為你收集整理的公交管理系统的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。