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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

最少换乘 第八届

發布時間:2025/3/16 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 最少换乘 第八届 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最少換乘

時間限制:2000?ms ?|? 內存限制:65535?KB 難度:3 描述

?歐洲某城是一個著名的旅游勝地,每年都有成千上萬的人前來觀光旅行。Dr. Kong決定利用暑假好好游覽一番。。

年輕人旅游不怕辛苦,不怕勞累,只要費用低就行。但Dr. Kong年過半百,他希望乘坐BUS從住的賓館到想去游覽的景點,期間盡可量地少換乘車。

?

Dr. Kon買了一張旅游地圖。他發現,市政部門為了方便游客,在各個旅游景點及賓館,飯店等地方都設置了一些公交站并開通了一些單程線路。每條單程線路從某個公交站出發,依次途經若干個站,最終到達終點站。

但遺憾的是,從他住的賓館所在站出發,有的景點可以直達,有的景點不能直達,則他可能要先乘某路BUS坐上幾站,再下來換乘同一站的另一路BUS,?這樣須經過幾次換乘后才能到達要去的景點。

?

為了方便,假設對該城的所有公交站用12……N編號。Dr. Kong所在位置的編號為1,他將要去的景點編號為N

請你幫助Dr. Kong尋找一個最優乘車方案,從住處到景點,中間換車的次數最少。

輸入
第一行: K 表示有多少組測試數據。(2≤k≤8)
接下來對每組測試數據:
第1行: M N 表示有M條單程公交線路,共有N站。(1<=M<=100 1<N<=500)
第2~M+1行: 每行描述一路公交線路信息,從左至右按運行順序依次給出了該線路上的所有站號,相鄰兩個站號之間用一個空格隔開。
輸出
對于每組測試數據,輸出一行,如果無法乘坐任何線路從住處到達景點,則輸出"N0",否則輸出最少換車次數,輸出0表示不需換車可以直達。
樣例輸入
2 3 7 6 7 4 7 3 6 2 1 3 5 2 6 1 3 5 2 6 4 3
樣例輸出
2 NO
來源
第八屆河南省程序設計大賽

AC代碼:

Dijkstra最短路算法就可以了

#include<iostream> #include<cstdio> #include<cstring> #define n 550 #define INF 0xFFFFFFF using namespace std; int s[n][n],dis[n],book[n]; int K,M,N; int main() {int i,j,k,t;char c[2*n+10];int a[n];int min,sum;while(cin>>K)while(K--){scanf("%d %d",&M,&N);for(i=1;i<=N;i++)for(j=1;j<=N;j++){if(i==j)s[i][j]=0;else s[i][j]=INF;}getchar();for(i=0;i<M;i++){t=0;gets(c);int p=strlen(c);for(j=0;j<p;j++){if(c[j]!=' '){sum=0;while(c[j]!=' '&&j<p){sum=sum*10+(c[j]-'0');j++;}a[t++]=sum;}}for(j=0;j<t;j++)for(k=j+1;k<t;k++)s[a[j]][a[k]]=1; }for(i=1;i<=N;i++) { dis[i]=s[1][i]; book[i]=0; } book[1]=1; for(i=1;i<=N;i++) { min=INF; for(j=1;j<=N;j++) if(!book[j] && dis[j]<min){ k=j; min=dis[j]; } book[k]=1; for(j=1;j<=N;j++) if(!book[j] && dis[k]+s[k][j]<dis[j]) dis[j]=dis[k]+s[k][j]; }if(dis[N]==INF)printf("NO\n");else printf("%d\n",dis[N]-1);}return 0; }

總結

以上是生活随笔為你收集整理的最少换乘 第八届的全部內容,希望文章能夠幫你解決所遇到的問題。

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