旅遊規劃 Dijkstra演算法

2022-07-25 05:36:08 字數 2005 閱讀 1316

終於又遇到了一遍過的題目了,果然只要不和007對上我還是可以的。

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

輸入說明:輸入資料的第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演算法的衍生用法。

需要注意的是這裡是兩種邊的權值,首要的是距離最短,在距離相等的情況下優先選擇收費低的。這就需要在鬆弛的時候加上乙個判斷語句。

#includeusing namespace std;

const int maxsize = 501;

const int inf = 1000;

typedef struct mgraph;

mgraph g;

void myinput(mgraph &g);

void myfindmin(mgraph g, int s, int d);

int main()

void myinput(mgraph &g)

for (int i = 0; i < g.e; i++)

}void myfindmin(mgraph g, int s, int d) ;

int path[maxsize];

int dist[maxsize];

int pay[maxsize];

for (int i = 0; i < g.n; i++)

set[s] = 1;

for (int i = 0; i < g.n - 1; i++)

set[temp] = 1;

for (int j = 0; j < g.n; j++)

else if (dist[temp] + g.edges[temp][j] == dist[j] && pay[temp] + g.pay[temp][j] < pay[j])

} }cout << dist[d] << " " << pay[d];

}

我給結點到自身的距離權值設定的值是inf,所以會出現繞圈的情況,所以這裡加了一條set的判斷語句。如果設定的是0的話,就不用這樣設定了,因為已經set過的值必定是最短路徑了,不可能出現再有最短路徑的情況;

這裡一定要想好增加判斷語句的位置,一定是要在鬆弛的時候增加判斷語句,因為這時候才是決定path的時候。

void myfindmin(mgraph g, int s, int d) ;

int path[maxsize];

int dist[maxsize];

int pay[maxsize];

for (int i = 0; i < g.n; i++)

set[s] = 1;

for (int i = 0; i < g.n - 1; i++)

set[temp] = 1;

for (int j = 0; j < g.n; j++)

else if (dist[temp] + g.edges[temp][j] == dist[j] && pay[temp] + g.pay[temp][j] < pay[j])

} }cout << dist[d] << " " << pay[d];

}

Dijkstra 旅遊規劃

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

pta7 7旅遊規劃(dijkstra演算法)

題意 給n給城市,m條公路,公路是雙向的,起點s,終點d,並給出每條公路連線的兩個city的編號以及路費,求s到d的最短距離,若具有最短距離的路線不止一條,求出路費最少的一條。思路 單源最短路徑問題,利用dijkstra演算法求出s到其他點的最短路徑,只不過加乙個路費cost,在dis相等的情況下,...

7 36 旅遊規劃 (25 分 Dijkstra

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