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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

最好的车

發布時間:2023/12/9 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 最好的车 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最好的車

Time Limit : 3000/1000ms (Java/Other)???Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 18???Accepted Submission(s) : 6

Problem Description

H城是一個旅游勝地。每年都有成千上萬的人前來觀光。為方便游客。巴士公司在各個旅游景點及賓館、飯店等地都設置了巴士站并開通了一些單程巴士線路。

每條單程巴士線路從某個巴士站出發。依次途徑若干個巴士站。最后到達終點巴士站。
一名旅客近期到H城旅游,他非常想其S公園游玩。但假設從他所在的飯店沒有一路巴士能夠直接到達S公園,則他可能要先乘某一路巴士坐幾站,再下來換乘同一站臺的還有一路巴士,這樣換乘幾次后到達S公園。


如今用整數1,2,...N給H城的全部的巴士站編號。約定這名旅客所在飯店的巴士站編號為1,S公園巴士站的編號為N。
寫一個程序。幫助這名旅客尋找一個最優乘車方案,使他在從飯店乘車到S公園的過程中換車的次數最少。

Input

有多組輸入數據,每組數據的第一行有兩個數字M和N(1<=M<=100 1<N<=500),表示開通了M條單程巴士線路,總共同擁有N個車站。

從第2行到第M+1行依次給出了第1條到第M條巴士線路的信息。

當中第i+1行給出的是第i條巴士線路的信息,從左至右按執行順序依次給出了該線路上的全部站號,相鄰兩個站號之間用一個空格隔開。

Output

對于每組數據輸出僅僅有一行。假設無法乘巴士從飯店到達S公園。則輸出“NO”。否則輸出你的程序所找到的最少換車次數,換車次數為0,表示不需換車就可以到達。

Sample Input

3 7 6 7 4 7 3 6 2 1 3 5

Sample Output

2

基本的還是對數據的處理,一個巴士線路上的站都僅僅要乘一次就到了,那么我們建立圖,假設i網站和j網站同一時候出如今一個巴士線路上就連一條邊,他們之間的權值為1.然后用最短路處理,dijkstra和floyed都能處理

#include <iostream>
#include <sstream>
#include <string>
#include <stdio.h>
#define MAX 100000099
#define Q 501
using namespace std;
void dijkstra(int);
int num[Q], a[Q][Q], dist[Q];
int main()
{
??? int M, N;
??? while(cin >> M >> N)
??? {
??????? for(int i = 1; i <= N; i++)
??????? {
??????????? for(int j = 1; j <= N; j++)
??????????????? a[i][j]=MAX;
??????????? dist[i]=MAX;
??????? }
??????? getchar();
??????? int len, x;
??????? string str;
??????? for (int i = 0; i < M; i++)
??????? {
?????????? getline(cin,str);
?????????? stringstream in(str);
?????????? len = 0;
?????????? while(in >> x)? num[++len] = x;
?????????? for (int j = 1; j < len; j++)
??????????????? for (int k = j+1; k <= len; k++)
??????????????????? a[num[j]][num[k]] = 1;
??????? }
??????? /*for (int i = 0; i <= N; i++)
??????? {
??????????? for (int j = 0; j <= N; j++)
??????????????? cout << a[i][j] << "\t";
??????????? cout << endl;
??????? }*/
??????? dijkstra(N);
??????? if(dist[N] == MAX)? cout << "NO" << endl;
??????? else cout << dist[N]-1 << endl;

??? }
}

void dijkstra(int n)
{
??? //s[N]為標記
?? ?int s[Q],newdist,i;
?? ?for(i=1;i<=n;i++)
?? ?{
?? ??? ?dist[i]=a[1][i];
?? ??? ?s[i]=0;
?? ?}
?? ?dist[1]=0;
?? ?s[1]=1;
?? ?for(i=2;i<=n;i++)
?? ?{
?? ???? //找出離初始位置最小的點
?? ??? ?int j,tem=MAX;
?? ??? ?int u=1;
?? ??? ?for(j=2;j<=n;j++)
?? ??? ??? ?if(!s[j]&&dist[j]<tem)
?? ??? ??? ?{
?? ??? ??? ??? ?u=j;
?? ??? ??? ??? ?tem=dist[j];
?? ??? ??? ?}
?? ??? ?s[u]=1;
?? ??? ?//更新dist[N]的值
?? ??? ?for(j=2;j<=n;j++)
?? ??? ?{
?? ??? ??? ?if(!s[j]&&a[u][j]<MAX)
?? ??? ??? ?{
?? ??? ??? ??? ?newdist=dist[u]+a[u][j];
?? ??? ??? ??? ?if(newdist<dist[j])
?? ??? ??? ??? ??? ?dist[j]=newdist;
?? ??? ??? ?}
?? ??? ?}
?? ?}
}


版權聲明:本文博客原創文章,博客,未經同意,不得轉載。

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

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

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