hihoCoder

来源:互联网 发布:无法加入网络 编辑:程序博客网 时间:2024/06/03 14:50

描述

万圣节的早上,小Hi和小Ho在经历了一个小时的争论后,终于决定了如何度过这样有意义的一天——他们决定去闯鬼屋!

在鬼屋门口排上了若干小时的队伍之后,刚刚进入鬼屋的小Hi和小Ho都颇饥饿,于是他们决定利用进门前领到的地图,找到一条通往终点的最短路径。

鬼屋中一共有N个地点,分别编号为1..N,这N个地点之间互相有一些道路连通,两个地点之间可能有多条道路连通,但是并不存在一条两端都是同一个地点的道路。那么小Hi和小Ho至少要走多少路程才能够走出鬼屋去吃东西呢?

提示:顺序!顺序才是关键。

输入

每个测试点(输入文件)有且仅有一组测试数据。

在一组测试数据中:

第1行为4个整数N、M、S、T,分别表示鬼屋中地点的个数和道路的条数,入口(也是一个地点)的编号,出口(同样也是一个地点)的编号。

接下来的M行,每行描述一条道路:其中的第i行为三个整数u_i, v_i, length_i,表明在编号为u_i的地点和编号为v_i的地点之间有一条长度为length_i的道路。

对于100%的数据,满足N<=10^3,M<=10^4, 1 <= length_i <= 10^3, 1 <= S, T <= N, 且S不等于T。

对于100%的数据,满足小Hi和小Ho总是有办法从入口通过地图上标注出来的道路到达出口。

输出

对于每组测试数据,输出一个整数Ans,表示那么小Hi和小Ho为了走出鬼屋至少要走的路程。

Sample Input
5 23 5 41 2 7082 3 1123 4 7214 5 3395 4 9601 5 8492 5 981 4 992 4 252 1 2003 1 146
/* *               ii.                                         ;9ABH,             *              SA391,                                    .r9GG35&G             *              &#ii13Gh;                               i3X31i;:,rB1            *              iMs,:,i5895,                         .5G91:,:;:s1:8A            *               33::::,,;5G5,                     ,58Si,,:::,sHX;iH1           *                Sr.,:;rs13BBX35hh11511h5Shhh5S3GAXS:.,,::,,1AG3i,GG           *                .G51S511sr;;iiiishS8G89Shsrrsh59S;.,,,,,..5A85Si,h8           *               :SB9s:,............................,,,.,,,SASh53h,1G.          *            .r18S;..,,,,,,,,,,,,,,,,,,,,,,,,,,,,,....,,.1H315199,rX,          *          ;S89s,..,,,,,,,,,,,,,,,,,,,,,,,....,,.......,,,;r1ShS8,;Xi          *        i55s:.........,,,,,,,,,,,,,,,,.,,,......,.....,,....r9&5.:X1          *       59;.....,.     .,,,,,,,,,,,...        .............,..:1;.:&s          *      s8,..;53S5S3s.   .,,,,,,,.,..      i15S5h1:.........,,,..,,:99          *      93.:39s:rSGB@A;  ..,,,,.....    .SG3hhh9G&BGi..,,,,,,,,,,,,.,83         *      G5.G8  9#@@@@@X. .,,,,,,.....  iA9,.S&B###@@Mr...,,,,,,,,..,.;Xh        *      Gs.X8 S@@@@@@@B:..,,,,,,,,,,. rA1 ,A@@@@@@@@@H:........,,,,,,.iX:       *     ;9. ,8A#@@@@@@#5,.,,,,,,,,,... 9A. 8@@@@@@@@@@M;    ....,,,,,,,,S8       *     X3    iS8XAHH8s.,,,,,,,,,,...,..58hH@@@@@@@@@Hs       ...,,,,,,,:Gs      *    r8,        ,,,...,,,,,,,,,,.....  ,h8XABMMHX3r.          .,,,,,,,.rX:     *   :9, .    .:,..,:;;;::,.,,,,,..          .,,.               ..,,,,,,.59     *  .Si      ,:.i8HBMMMMMB&5,....                    .            .,,,,,.sMr    *  SS       :: h@@@@@@@@@@#; .                     ...  .         ..,,,,iM5    *  91  .    ;:.,1&@@@@@@MXs.                            .          .,,:,:&S    *  hS ....  .:;,,,i3MMS1;..,..... .  .     ...                     ..,:,.99    *  ,8; ..... .,:,..,8Ms:;,,,...                                     .,::.83    *   s&: ....  .sS553B@@HX3s;,.    .,;13h.                            .:::&1    *    SXr  .  ...;s3G99XA&X88Shss11155hi.                             ,;:h&,    *     iH8:  . ..   ,;iiii;,::,,,,,.                                 .;irHA     *      ,8X5;   .     .......                                       ,;iihS8Gi   *         1831,                                                 .,;irrrrrs&@   *           ;5A8r.                                            .:;iiiiirrss1H   *             :X@H3s.......                                .,:;iii;iiiiirsrh   *              r#h:;,...,,.. .,,:;;;;;:::,...              .:;;;;;;iiiirrss1   *             ,M8 ..,....,.....,,::::::,,...         .     .,;;;iiiiiirss11h   *             8B;.,,,,,,,.,.....          .           ..   .:;;;;iirrsss111h   *            i@5,:::,,,,,,,,.... .                   . .:::;;;;;irrrss111111   *            9Bi,:,,,,......                        ..r91;;;;;iirrsss1ss1111   *            代码无BUG!!! */#include <stdio.h>#include <string.h>#define MAXN 1005int N,M,S,T;int map[MAXN][MAXN],dis[MAXN],vis[MAXN];int mintwo(int x,int y){return x<y?x:y;}void dikjstra(int S){for (int i = 1; i <=N; ++i)dis[i]=map[S][i];vis[S]=1;dis[S]=0;for (int i = 1; i < N; ++i){int pos;int min=0x7f7f7f7f;for(int j=1;j<=N;j++){if(vis[j]==0&&dis[j]<min){min = dis[pos=j];}}if(min==0x7f7f7f7f)break;//如果是没有路径,他就不在返回了vis[pos]=1;for(int k=1;k<=N;k++){if(vis[k]==0&&map[pos][k]+dis[pos]<dis[k])dis[k]=map[pos][k]+dis[pos];}//printf("%d   %d\n",pos,dis[pos]);}}int main(int argc, char const *argv[]){while(scanf("%d%d%d%d",&N,&M,&S,&T)==4&&N&&M){memset(vis,0,sizeof(vis));//memset(dis,1<<7,sizeof(dis));memset(map,0x7f,sizeof(map));for (int i = 1; i <= M; ++i){int n1,n2,m;scanf("%d %d %d",&n1,&n2,&m);map[n1][n2]=map[n2][n1]=mintwo(map[n2][n1],m);}dikjstra(S);printf("%d\n", dis[T]);}return 0;}

3 2 1061 4 8604 1 7955 4 4795 4 2803 4 3411 4 6224 2 3622 3 4154 1 9042 1 7162 5 575
Sample Output
123


原创粉丝点击