一個人的旅行_hdu_2066(dijkstra).java
一個人的旅行
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 15334 Accepted Submission(s): 5211
Problem Description
雖然草兒是個路痴(就是在杭電待了一年多,居然還會在校園裡迷路的人,汗~),但是草兒仍然很喜歡旅行,因為在旅途中 會遇見很多人(白馬王子,^0^),很多事,還能豐富自己的閱歷,還可以看美麗的風景……草兒想去很多地方,她想要去東京鐵塔看夜景,去威尼斯看電影,去陽明山上看海芋,去紐約純粹看雪景,去巴黎喝咖啡寫信,去北京探望孟姜女……眼看寒假就快到了,這麼一大段時間,可不能浪費啊,一定要給自己好好的放個假,可是也不能荒廢了訓練啊,所以草兒決定在要在最短的時間去一個自己想去的地方!因為草兒的家在一個小鎮上,沒有火車經過,所以她只能去鄰近的城市坐火車(好可憐啊~)。
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個數,表示草兒想去地方。
接著有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
Author
Grass
Source
Recommend
import java.util.Arrays;
import java.util.Scanner;
public class Main{
static int MAX=100000000,map[][],D,end[];
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
while(input.hasNext()){
int t=input.nextInt();
int s=input.nextInt();
D=input.nextInt();
map=new int[1005][1005];
for(int i=1;i<=1000;i++)
Arrays.fill(map[i], MAX);
for(int i=0;i<t;i++){
int a=input.nextInt();
int b=input.nextInt();
int c=input.nextInt();
if(map[a][b]>c)
map[a][b]=map[b][a]=c;
}
int from[]=new int[s];
for(int i=0;i<s;i++)
from[i]=input.nextInt();
end=new int[D];
for(int i=0;i<D;i++){
end[i]=input.nextInt();
}
int max=MAX;
/*for(int i=1;i<=10;i++){
for(int j=1;j<=10;j++)
System.out.print(map[i][j]+" ");
System.out.println();
}*/
for(int i=0;i<s;i++){
int ss=dij(from[i]);
//System.out.println("*******"+ss);
if(max>ss){
max=ss;
}
}
System.out.println(max);
}
}
private static int dij(int v) {
boolean vis[]=new boolean[1005];
int d[]=new int[1005];
for(int i=1;i<=1000;i++){
vis[i]=false;
d[i]=map[v][i];
}
vis[v]=true;
d[v]=0;
int x=0;
int min;
for(int i=1;i<=1000;i++){
min=MAX;
for(int j=1;j<=1000;j++){
if(!vis[j]&&min>d[j]){
x=j;
min=d[j];
}
}
vis[x]=true;
if(min==MAX) break;
for(int j=1;j<=1000;j++){
if(!vis[j]&&d[j]>d[x]+map[x][j]){
d[j]=d[x]+map[x][j];
}
}
}
min=MAX;
// System.out.println("##############"+D);
for(int i=0;i<D;i++){
//System.out.println("-----"+d[i]);
if(min>d[end[i]])
min=d[end[i]];
}
return min;
}
}
相關文章
- 一個人的旅行 (dijkstra演算法求最短路)演算法
- 杭電OJ 2066 一個人的旅行
- JAVA實現DIJKSTRA演算法Java演算法
- 分享一些 Java 後端的個人乾貨Java後端
- 一條SQL語句的旅行之路SQL
- 對JAVA的一些個人總結——物件導向Java物件
- 計算機大師Dijkstra談Haskell和Java計算機HaskellJava
- 寫java程式碼的一些個人感受和總結Java
- java的個人學習經驗Java
- SPFA && dijkstra 模版
- 常規部落格看膩了,使用openlayers製作旅行地圖的個人部落格?地圖
- 旅行
- 最短路-樸素版Dijkstra演算法&堆優化版的Dijkstra演算法優化
- 一個兩年java程式猿的2017個人總結Java
- 如何在 Java 中實現 Dijkstra 最短路演算法Java演算法
- java中傳值方式的個人理解Java
- 一人一貓旅行記之Handler原理
- Java Enum 個人見解Java
- Ipsos:71%的全球旅行者第一大旅行動機是“增長見識”
- 【JAVA演算法】圖論演算法 -- Dijkstra演算法Java演算法圖論
- Dijkstra演算法演算法
- 最短路之Dijkstra
- Java | 個人總結的Java常用API手冊彙總JavaAPI
- Dijkstra 演算法的手動分析演算法
- 黑客老王:一個人的黑客史黑客
- 一個人的網站開發網站
- ACM 獨木舟上的旅行ACM
- 圖論-Dijkstra最短路圖論
- DBA工作交接完畢,下週一開始新的旅行
- 看一個人的身價,要看他的對手!手把手教你如何看穿一個人
- 旅行者
- 對一邊旅行一邊程式設計的生活方式的體驗和思考程式設計
- 搭建個人圖書館!一個簡單的線上個人書庫
- 蟻群演算法實現TSP(旅行商)問題(java)演算法Java
- 從《旅行串串》看小遊戲如何講述一個好的故事遊戲
- 小米90分智慧解鎖旅行箱評測 年輕人第一款安全旅行箱
- 最短路dijkstra演算法演算法
- 貪心演算法Dijkstra演算法