博主是acm剛入門的人,如果有錯誤希望能有人指出,不喜勿噴~~
input
輸入資料有多組,每組的第一行是三個整數t,s和d,表示有t條路,和草兒家相鄰的城市的有s個,草兒想去的地方有d個;
接著有t行,每行有三個整數a,b,time,表示a,b城市之間的車程是time小時;(1=<(a,b)<=1000;a,b 之間可能有多條路)
接著的第t+1行有s個數,表示和草兒家相連的城市;
接著的第t+2行有d個數,表示草兒想去地方。
output
輸出草兒能去某個喜歡的城市的最短時間。
sample input
6 2 3
1 3 5
1 4 7
2 8 12
3 8 4
4 9 12
9 10 2
1 2
8 9 10
sample output
9分析:可以用floyd演算法解決,博主寫這個**也花了好長時間,測試正確,但是提交上出現wrong answer;
先擺上正確的:
#include
#include
#include
#include
using
namespace
std;
const
int maxn = 999999;
const
int n = 1010;
intmap[n][n],s[n],e[n],maxx;
int t,s,d;
void floyd(void)
}int main()
for(int i = 1; i <=s ; i++)
cin >> s[i];
for(int j = 1 ; j<=d ; j++)
cin >>e[j];
floyd();
int ans = maxn;
for(int i = 1; i <=s ; i++)
for(int j = 1; j <= d ; j++)
if(map[s[i]][e[j]] < ans)
ans = map[s[i]][e[j]] ;
cout
<< ans << endl;
}return
0;}
思路基本上不是很難,只要理解floyd就可以做出來,其中要注意一下map的初始化問題,需要一層一層進行初始化,不能採取別的方式;
現在說一下我犯錯的地方:
以下是錯誤的**:
#include
#include
#include
#include
#define maxn 1000000
#define n 1010
using
namespace
std;
intmap[n][n],s[n],e[n],maxx;
int t,s,d;
void floyd(void)
}int main()
for(int i=1; i<=s; i++) //標記需要查詢的城市
for(int i=1; i<=d; i++) // 記錄下來想去的地方的標記
floyd();
int res = maxn;
for(int i = 1 ; i <= maxx ; i++)
for(int j = 1 ; j <= maxx ; j++)
res = min(res,map[i][j]);
cout
<< res << endl;
}return
0;}
for(int i = 1 ; i <= maxx ; i++)
for(int j = 1 ; j <= maxx ; j++)
res = min(res,map[i][j]);
cout << res << endl;
這段出錯了,這樣不和題意;
乙個人的旅行(Floyd)
原題 hdu2066 一開始以為是一道簡單的多源最短路徑問題,就用floyd演算法來解,後來發現時間複雜度太高了,看過別人的題解,學到了floyd演算法 剪枝,就是 for int i 1 i 1000 i 這行 後加乙個 if mp i k include using namespace std ...
HDU 2066 乙個人的旅行 (floyd演算法)
思路 求有多個起點和多個終點,找出從其中任意乙個起點到任意乙個終點的距離最短,用floyd演算法,但是要注意很多細節的優化,要不會超時 1 include2 include3 include4 define inf 0x3fffffff 5int map 1001 1001 max 6bool st...
乙個人旅行
乙個人旅行計畫正式啟動啦 一直想乙個人好好的出去走走轉轉.然後把遇到的看到的記錄下來,成為回憶.但是一直沒有鼓起勇氣或者說沒有找到好的藉口.經過長達四年的準備 嘿嘿,有點誇張 目前各方面已經就緒 2008年12月份 公園瀏覽年票 到位 2009年5月份 確實地說是上周五 2009.05.08 富士相...