zoukankan      html  css  js  c++  java
  • CodeVS 1557 热浪

    德克萨斯纯朴的民眾们这个夏天正在遭受巨大的热浪!!!他们的德克萨斯长角牛吃起来不错,可是他们并不是很擅长生產富含奶油的乳製品。Farmer John此时以先天下之忧而忧,后天下之乐而乐的精神,身先士卒地承担起向德克萨斯运送大量的营养冰凉的牛奶的重任,以减轻德克萨斯人忍受酷暑的痛苦。

    FJ已经研究过可以把牛奶从威斯康星运送到德克萨斯州的路线。这些路线包括起始点和终点先一共经过T (1 <= T <= 2,500)个城镇,方便地标号為1T。除了起点和终点外地每个城镇由两条双向道路连向至少两个其它地城镇。每条道路有一个通过费用(包括油费,过路费等等)。

    给定一个地图,包含C (1 <= C <= 6,200)条直接连接2个城镇的道路。每条道路由道路的起点Rs,终点Re (1 <= Rs <= T; 1 <= Re <= T),和花费(1 <= Ci <= 1,000)组成。求从起始的城镇Ts (1 <= Ts <= T)到终点的城镇Te(1 <= Te <= T)最小的总费用。

    这题就用dijkstra啦,AC的同时也明白的dijkstra算法的含义。

    变量功能如其名,方便新手一起学习学习

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 #define MAX 1000000 
     5 int map[2501][2501];//前一维代表起始点,后一维代表终止点 
     6 int pointsPassed[2501],shortestDist[2501];
     7 int T,C,Ts,Te;//T=城镇数 C=道路数 Ts=起始镇 Te=结束镇 
     8 int Rs,Re,Ci;
     9 
    10 int main()
    11 {
    12     int i,j,nowMinDist,toPoint;
    13     scanf("%d%d%d%d",&T,&C,&Ts,&Te);
    14     
    15     for(i=1;i<=T;i++)
    16         for(j=1;j<=T;j++)
    17             map[i][j]=MAX;
    18             
    19     for(i=1;i<=C;i++) 
    20     {
    21         scanf("%d%d%d",&Rs,&Re,&Ci);
    22         if(Ci<=map[Rs][Re])//根据输入可能会有更便宜的路 
    23         {
    24             map[Rs][Re]=Ci;
    25             map[Re][Rs]=Ci;
    26         }
    27     }
    28     map[Ts][Ts]=0;
    29     
    30     for(i=1;i<=T;i++) //初始化 
    31     {
    32         shortestDist[i]=map[Ts][i];    
    33         pointsPassed[i]=0;
    34     }
    35     pointsPassed[Ts]=1;
    36     
    37     for(i=2;i<=T;i++)
    38     {
    39         nowMinDist=MAX; 
    40         toPoint=Ts;//每一次都从出发点找与其距离最短的未经过点 
    41                    //现在只是已知到这个点的最短路径而已 
    42                       
    43         for(j=1;j<=T;j++)
    44             if((!pointsPassed[j]) && shortestDist[j]<nowMinDist) 
    45             {
    46                 toPoint=j; 
    47                 nowMinDist=shortestDist[j];
    48             }
    49         
    50         //收录此点
    51         pointsPassed[toPoint]=1;
    52         for(j=1;j<=T;j++)
    53             if((!pointsPassed[j]) && map[toPoint][j]!=MAX)//从这个点扩展出向外的点 
    54                  if(shortestDist[toPoint] + map[toPoint][j] < shortestDist[j])
    55                        shortestDist[j]=shortestDist[toPoint] + map[toPoint][j];
    56     } 
    57     
    58     printf("%d",shortestDist[Te]);
    59     return 0;
    60 }
  • 相关阅读:
    基于Ubuntu + nextCloud 搭建自己的私人网盘
    基于Ubuntu部署 memcached 服务
    基于Ubuntu搭建Seafile专属网盘
    基于ubuntu搭建 Discuz 论坛
    基于ubuntu搭建 WordPress 个人博客
    基于CentOS 搭建 FTP 文件服务
    搭建 WordPress 个人博客
    Scale-out NAS 和scale-up NAS 系统的优缺点
    鱼缸的启示:Scale-out和Scale-up架构
    整死你个妖精,CDN西游捉妖记!
  • 原文地址:https://www.cnblogs.com/KakagouLT/p/4868359.html
Copyright © 2011-2022 走看看