HDU3665Seaside(最短路径)
生活随笔
收集整理的這篇文章主要介紹了
HDU3665Seaside(最短路径)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Description
XiaoY is living in a big city, there are N towns in it and some towns near the sea. All these towns are numbered from 0 to N-1 and XiaoY lives in the town numbered ’0’. There are some directed roads connecting them. It is guaranteed that you can reach any town from the town numbered ’0’, but not all towns connect to each other by roads directly, and there is no ring in this city. One day, XiaoY want to go to the seaside, he asks you to help him find out the shortest way.
Input
There are several test cases. In each cases the first line contains an integer N (0<=N<=10), indicating the number of the towns. Then followed N blocks of data, in block-i there are two integers, Mi (0<=Mi<=N-1) and Pi, then Mi lines followed. Mi means there are Mi roads beginning with the i-th town. Pi indicates whether the i-th town is near to the sea, Pi=0 means No, Pi=1 means Yes. In next Mi lines, each line contains two integers S Mi and L Mi, which means that the distance between the i-th town and the S Mi town is L Mi.
Output
Each case takes one line, print the shortest length that XiaoY reach seaside.
Sample Input
5
1 0
1 1
2 0
2 3
3 1
1 1
4 100
0 1
0 1
Sample Output
XiaoY is living in a big city, there are N towns in it and some towns near the sea. All these towns are numbered from 0 to N-1 and XiaoY lives in the town numbered ’0’. There are some directed roads connecting them. It is guaranteed that you can reach any town from the town numbered ’0’, but not all towns connect to each other by roads directly, and there is no ring in this city. One day, XiaoY want to go to the seaside, he asks you to help him find out the shortest way.
Input
There are several test cases. In each cases the first line contains an integer N (0<=N<=10), indicating the number of the towns. Then followed N blocks of data, in block-i there are two integers, Mi (0<=Mi<=N-1) and Pi, then Mi lines followed. Mi means there are Mi roads beginning with the i-th town. Pi indicates whether the i-th town is near to the sea, Pi=0 means No, Pi=1 means Yes. In next Mi lines, each line contains two integers S Mi and L Mi, which means that the distance between the i-th town and the S Mi town is L Mi.
Output
Each case takes one line, print the shortest length that XiaoY reach seaside.
Sample Input
5
1 0
1 1
2 0
2 3
3 1
1 1
4 100
0 1
0 1
Sample Output
2
題意:這道題輸入的比較麻煩。第一行n代表有n個城市(標號0~n),然后有n行數據,這n行數據每行有兩個數m,p,m代表i城市有m條路,p表示第i個城市是否連接海邊,如果是0不連接,是1就連接海邊。每個m,p,后接有m行數據,每行數據有兩個字母s,l,s代表這條路連接的城市,l代表這條路的距離。最后問小y到海邊的最短距離
思路:最短路,就是輸入的方式變得麻煩了,實質還是沒有變,輸入的是否判斷該城市是否連接海邊,如果連接先保存在一個數組里,然后對每條路更新最短距離就好了。最后floyd算法做,調出保存的連接海邊城市,搜索0~這個城市的距離,找到最小距離就好了。注意小y老家在0城市!
代碼:
#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> #include<math.h> using namespace std; #define INF 0xfffffff int pri[1010][1010];//兩個頂點之間距離 int w[1010]; int n,m; void floyd() {for(int k=0;k<n;k++)//中間點 {for(int i=0;i<n;i++){for(int j=0;j<n;j++){pri[i][j]=min(pri[i][j],abs(pri[i][k]+pri[k][j]));}}} } int main(){while(scanf("%d",&n)!=EOF){int k=0;int ans=INF;for(int i=0;i<n;i++)for(int j=0;j<n;j++)pri[i][j]=i==j?0:INF;for(int i=0;i<n;i++){int m,y;scanf("%d%d",&m,&y);if(y==1)w[k++]=i;for(int j=0;j<m;j++){int a,b;scanf("%d%d",&a,&b);if(pri[i][a]>b)pri[i][a]=b;}}floyd();for(int i=0;i<k;i++){if(pri[0][w[i]]<ans)ans=pri[0][w[i]];}printf("%d\n",ans);}return 0;}總結
以上是生活随笔為你收集整理的HDU3665Seaside(最短路径)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python好找工作吗2017-2017
- 下一篇: 什么是云计算中的SaaS(软件即服务)?