PTA 資料結構與演算法 7 9 旅遊規劃

2021-09-23 01:53:24 字數 1587 閱讀 7993

如有不對,不吝賜教

進入正題:

有了一張自駕旅遊路線圖,你會知道城市間的高速公路長度、以及該公路要收取的過路費。現在需要你寫乙個程式,幫助前來諮詢的遊客找一條出發地和目的地之間的最短路徑。如果有若干條路徑都是最短的,那麼需要輸出最便宜的一條路徑。

輸入格式:

輸入說明:輸入資料的第1行給出4個正整數n、m、s、d,其中n(2≤n≤500)是城市的個數,順便假設城市的編號為0~(n−1);m是高速公路的條數;s是出發地的城市編號;d是目的地的城市編號。隨後的m行中,每行給出一條高速公路的資訊,分別是:城市1、城市2、高速公路長度、收費額,中間用空格分開,數字均為整數且不超過500。輸入保證解的存在。

輸出格式:

在一行裡輸出路徑的長度和收費總額,數字間以空格分隔,輸出結尾不能有多餘空格。

輸入樣例:

4 5 0 3

0 1 1 20

1 3 2 30

0 3 4 10

0 2 2 20

2 3 1 20

輸出樣例:

3 40

這道題屬於最短路徑問題,因為是單源最短路徑問題,所以我們選擇dijkstra演算法,以s為起點開始鬆弛就好,這裡注意距離相同的時候,取費用最少的那條路,所以要在記錄路徑的長度的同時還得記錄費用。

**:

#include

#include

#define inf 1000000

intmain

(void

)else

} min[s]=0

;//到自己的距離

visit[s]

=true

;for

(i=0

;i)for

(i=s,j=

0;j)else

if(money[i]

[k]+minmoney[i]

) minmoney[k]

=money[i]

[k]+minmoney[i];}

}short curmin;

for(k=

0;k(!visit[k]

)break

; curmin=k;

//初始化乙個鬆弛點

for(k=

0;k(min[curmin]

>min[k]

&&!visit[k]

)//找到下乙個鬆弛的點

curmin=k;

if(curmin==d)

break

; visit[curmin]

=true

; i=curmin;

}printf

("%d %d"

,min[d]

,minmoney[d]);

return0;

}

結果:

資料結構PTA 案例6 1 5 旅遊規劃

有了一張自駕旅遊路線圖,你會知道城市間的高速公路長度 以及該公路要收取的過路費。現在需要你寫乙個程式,幫助前來諮詢的遊客找一條出發地和目的地之間的最短路徑。如果有若干條路徑都是最短的,那麼需要輸出最便宜的一條路徑。輸入格式 輸入說明 輸入資料的第1行給出4個正整數n m s d,其中n 2 n 50...

PTA 資料結構與演算法 堆疊

1.棧底元素是不能刪除的元素。1分 tf 2.對順序棧進行進棧 出棧操作不涉及元素的前 後移動問題。1分 tf 3.若用data 1 m 表示順序棧的儲存空間,則對棧的進棧 出棧操作最多只能進行m次。1分 tf 4.通過對堆疊s操作 push s,1 push s,2 pop s push s,3 ...

PTA 資料結構與演算法 佇列

1.在用陣列表示的迴圈佇列中,front值一定小於等於rear值。1分 tf 2.迴圈佇列執行出隊操作時會引起大量元素的移動。1分 tf 3.棧是插入和刪除只能在一端進行的線性表 佇列是插入在一端進行,刪除在另一端進行的線性表。1分 tf 4.n個元素進隊的順序和出隊的順序總是一致的。1分 tf 1...