CCF行車路線

2021-10-24 04:43:32 字數 1385 閱讀 4817

題目鏈結

注意事項

dev c++宣告 檔案才能使用memset函式

最短路演算法一定要先初始化好相關的陣列變數,將相應的值初始化為最大值

題目最終所求的結果一般都很大,最好使用 long long 型別。

一定要先測試一遍程式再提交

最開始這道題我想用兩張圖同時用floyd演算法過一遍,最後發現這種想法是錯誤的

下面的這個方法採用了類似spfa演算法的思想,

dis[i]表示從起點到達i點的路徑的最後一段路程是大路。

dis1[i]表示從起點到達i點的路徑的最後一段路程是小路。

#include

#include

#include

#include

#include

using

namespace std;

#define debug

#define max 550

#define inf 0x3f3f3f3f

typedef

long

long ll;

int m, n;

vector

dis(max)

,dis1

(max)

;ll g[max]

[max]

, g1[max]

[max]

;vector<

bool

>

visit

(max,

false);

//計算所有以小路為連線的兩點之間的距離

void

floyd()

if(i == k || j == k)

continue;if

(g1[i]

[j]> g1[i]

[k]+ g1[k]

[j])}}

//dis1[i]第i條路為小路

//dis[i] 第i條路為大路

void

dij(

int s)

}//上一條是小路,這一條是大路

if(dis[i]

> dis1[top]

+ g[top]

[i])}if

(g1[top]

[i]< inf)

//說明這一條路是小路}}

}}}int

main()

else

}floyd()

;dij(1

);cout <<

min(dis[n]

, dis1[n]);

//以大路結尾和以小路結尾哪乙個距離更小

return0;

}

ccf 行車路線

問題描述 小明和小芳出去鄉村玩,小明負責開車,小芳來導航。小芳將可能的道路分為大道和小道。大道比較好走,每走1公里小明會增加1的疲勞度。小道不好走,如果連續走小道,小明的疲勞值會快速增加,連續走 s公里小明會增加 s2的疲勞度。例如 有5個路口,1號路口到2號路口為小道,2號路口到3號路口為小道,3...

CCF行車路線

首先這道題沒寫出來,困擾了好久,也看過了別人的 都是運用迪傑斯特拉和弗洛伊德相結合,但是我不是很理解,要再深入理解一下這兩個演算法。期間用了記憶化搜尋,得了六十分 用了求出每條路徑再計算每條路徑值,超時,加了最優性剪枝,也只有三十。先記下這道題,回頭再寫。include include define...

ccf 行車路線

問題描述 小明和小芳出去鄉村玩,小明負責開車,小芳來導航。小芳將可能的道路分為大道和小道。大道比較好走,每走1公里小明會增加1的疲勞度。小道不好走,如果連續走小道,小明的疲勞值會快速增加,連續走s公里小明會增加s 2的疲勞度。例如 有5個路口,1號路口到2號路口為小道,2號路口到3號路口為小道,3號...