91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言中怎么實現一個旅游景點咨詢系統

發布時間:2021-08-07 14:09:58 來源:億速云 閱讀:230 作者:Leah 欄目:編程語言

本篇文章為大家展示了C語言中怎么實現一個旅游景點咨詢系統,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

1.問題描述:創建一個至少有15個點的有向網表示的某個旅游景點的導游圖。頂點代表景點,類型為字符串(例如,泰山導游圖:“天地廣場門”,“十八盤”,“馮玉祥墓”,“桃花峪門”,“中天門”,“南天門”,“玉皇頂”等),弧表示兩個景點之間可以直達,弧上的權值表示兩個景點之間的路程(公里數),弧上還有到達方法的信息(有步行和索道兩種)。建立一個游客咨詢系統。

2.基本要求

(1)創建圖的存儲結構。(2)輸入兩個景點名,就可以得到從一個景點到達另一個景點的所有簡單路徑、相應路徑的路程公里數、行走的方法(每一段是步行,還是坐索道);(3)輸入兩個景點名,就可以得到其最短路徑,即:路程最短的行進方法;如果兩者無路徑可通,就得出“兩景點不可達的信息”。(4)按照題意要求獨立進行設計,設計結束后按要求寫出設計報告。

一、代碼塊:

#include<bits/stdc++.h>/*#include<iostream>#include<fstream>#include<algorithm>#include<stack>*/using namespace std;const int MAXVEX=50;const int INF=0x3fffffff;//s表示索道 w表示步行typedef struct{//邊的結構 int wei;//權值 char way;//到達方式}EdgeType;typedef struct{ string vexs[MAXVEX];//頂點信息,string類型 EdgeType arc[MAXVEX][MAXVEX];//邊的信息 int numVertexes,numEdges;//頂點數和邊數}MGraph;void CreateMGraph(MGraph *G){ FILE *fp; fp=fopen("read.txt","r"); int i,j,k,w; cout<<"請輸入頂點數和邊數"<<endl; //cin>>G->numVertexes>>G->numEdges; fscanf(fp,"%d %d",&G->numVertexes,&G->numEdges); cout<<"請輸入"<<G->numVertexes<<"個景點名"<<endl; char temp[MAXVEX]; for(i=0;i<G->numVertexes;++i){ fscanf(fp,"%s",temp);//cin>>G->vexs[i]; G->vexs[i]=temp; } //初始化鄰接矩陣 for(i=0;i<G->numVertexes;++i) for(j=0;j<G->numVertexes;++j)  G->arc[i][j].wei=INF; cout<<"請輸入"<<G->numEdges<<"條邊,包括起點下標、終點下標、路程(KM)和到達方式(s表示索道 w表示步行)"<<endl; for(k=0;k<G->numEdges;++k){ char ch; fscanf(fp,"%d %d %d %c",&i,&j,&w,&ch);//cin>>i>>j>>w>>ch; G->arc[i][j].wei=w; G->arc[i][j].way=ch; } cout<<endl<<"*******鄰接矩陣建立完成,各景點對應的編號如下*******"<<endl<<endl; for(i=0;i<G->numVertexes;++i){ cout<<"編號"<<i<<" "<<G->vexs[i]<<endl; }}int solution[MAXVEX];//記錄路線bool vis[MAXVEX];//標記數組int flag;//通路標記void print(MGraph G,int len)//參數為路徑上的第幾個點{ flag=1; int sum=0; cout<<G.vexs[solution[1]]; for(int i=2;i<=len;++i){//第一個點已經打印,打印剩下的點 if(G.arc[solution[i-1]][solution[i]].way=='s') cout<<" -> "<<"(索道)"<<G.vexs[solution[i]]; else cout<<" -> "<<"(步行)"<<G.vexs[solution[i]]; sum+=G.arc[solution[i-1]][solution[i]].wei; } cout<<endl<<"該路徑總路程為"<<sum<<"KM"<<endl; cout<<endl;}void dfs(MGraph G,int k,int loc,int e)//k為第幾步,loc為當前的位置,e為目標{ solution[k]=loc;//當前頂點加入路線 vis[loc]=1;//標記置為1 if(loc==e) print(G,k); else for(int i=0;i<G.numVertexes;++i){ if(vis[i]==0&&G.arc[loc][i].wei<INF) dfs(G,k+1,i,e); } vis[loc]=0;//取消標記}void slove_allpath(MGraph G,int s,int e)//查找所有可行路徑{ flag=0;//有無路徑標記 memset(vis,0,sizeof(vis)); dfs(G,1,s,e);//從第一步起點開始 if(!flag) cout<<"無可行路徑!"<<endl;}int P[MAXVEX][MAXVEX];//用于存儲最短路徑下標的數組int D[MAXVEX][MAXVEX];//用于存儲到各點最短路徑的權值之和void ShortestPath_Dijkstra(MGraph G,int v0)//最短路求解{ int v,w,k,Min; int Final[MAXVEX];//標記,=1表示求得頂點V0至Vw的最短路徑 for(v=0;v<G.numVertexes;v++){//初始化數據 Final[v]=0;//全部頂點初始化為未知最短路徑狀態 D[v0][v]=G.arc[v0][v].wei;//將與V0有連線的頂點加上權值 P[v0][v]=v0;//初始化路徑數組pre頂點均為起始點V0 } D[v0][v0]=0;//v0至v0路徑為0 Final[v0]=1;//v0至v0不需要求路徑 for(v=1;v<G.numVertexes;v++){ Min=INF;//初始化最小值為INF for(w=0;w<G.numVertexes;w++){  if(!Final[w]&&D[v0][w]<Min){  k=w;  Min=D[v0][w];//w頂點離v0頂點更近  } } Final[k]=1;//將目前找到的最近的頂點位置置為1 for(w=0;w<G.numVertexes;++w){//修正當前最短路徑及距離  //如果經過v頂點的路徑比現在這條路徑的長度短的話  if(!Final[w]&&(Min+G.arc[k][w].wei<D[v0][w])){  D[v0][w]=Min+G.arc[k][w].wei;//修改當前路徑長度  P[v0][w]=k;  } } }}stack<int> xiang;//輔助棧void slove_ShortestPath(MGraph G,int s,int e)//查找最短路徑{ int tempe=e; if(D[s][e]==INF) cout<<"無可行路徑!"<<endl; else{//有最短路徑 int temp=D[s][e]; xiang.push(e);//終點先進棧 while(P[s][e]!=s)//根據P數組倒著找 {//只要不到起點  xiang.push(P[s][e]);  e=P[s][e]; } //cout<<"由"<<G.vexs[s]<<"到"<<G.vexs[tempe]<<"的最短路徑為:"<<endl; cout<<G.vexs[s]; int pre=s; while(!xiang.empty()) {  int top=xiang.top();  if(G.arc[pre][top].way=='s') cout<<" -> "<<"(索道)"<<G.vexs[top];  else cout<<" -> "<<"(步行)"<<G.vexs[top];  pre=top;  xiang.pop(); } cout<<endl<<"該路徑總路程為"<<temp<<"KM"<<endl; } cout<<endl;}int main(){ MGraph G; CreateMGraph(&G); for(int i=0;i<G.numVertexes;++i) ShortestPath_Dijkstra(G,i); /* for(int i=0;i<G.numVertexes;++i){ for(int j=0;j<G.numVertexes;++j)  cout<<P[i][j]<<' '; cout<<endl; } cout<<endl; for(int i=0;i<G.numVertexes;++i){ for(int j=0;j<G.numVertexes;++j)  cout<<D[i][j]<<' '; cout<<endl; } */ cout<<"請輸入需要查找的路徑(對應的起點和終點下標),輸入-1結束查找"<<endl; int s,e; while(cin>>s>>e&&(s+e)>=0) { if(s==e){  cout<<"您已在該景點"<<endl;  continue; } cout<<"*******由"<<G.vexs[s]<<"到"<<G.vexs[e]<<"可行的路徑有:*******"<<endl; slove_allpath(G,s,e);//查找所有可行路徑 cout<<"*******由"<<G.vexs[s]<<"到"<<G.vexs[e]<<"的最短路徑為:*******"<<endl; slove_ShortestPath(G,s,e);//查找最短路徑 } cout<<"********************查 找 結 束********************"<<endl; return 0;}

上述內容就是C語言中怎么實現一個旅游景點咨詢系統,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

潼南县| 涞水县| 日照市| 印江| 红原县| 岳阳县| 闵行区| 繁峙县| 丰原市| 揭东县| 浮山县| 稻城县| 兴城市| 廉江市| 莎车县| 怀安县| 延津县| 南部县| 香港| 舟山市| 澄江县| 天祝| 锦屏县| 盐边县| 湟中县| 留坝县| 陕西省| 泸西县| 随州市| 永康市| 张北县| 杂多县| 阳山县| 丹东市| 息烽县| 乐平市| 苗栗县| 舞阳县| 龙陵县| 土默特右旗| 安化县|