• hdoj 2544 最短路


    题目传送:http://acm.hdu.edu.cn/showproblem.php?pid=2544

    分析:Dijkstra算法

     1 //2013-10-30 10:01:25    Accepted    2544    15MS    340K    1824 B    C++    空信高手
     2 #include <iostream>
     3 using namespace std;
     4 
     5 /*==================================================*
     6  | Dijkstra 数组实现O (N^2 )
     7 | Dijkstra --- 数组实现( 在此基础上可直接改为STL 的Queue实现)
     8  | lowcost[] --- beg 到其他点的最近距离
     9 | path[] -- beg为根展开的树,记录父亲结点
    10 *==================================================*/
    11 #define INF 0x3F3F3F3F;
    12 const int N=110;
    13 int path[N],vis[N];
    14 int cost[N][N];
    15 void Dijkstra(int lowcost[N],int n,int beg)
    16 {
    17     int i,j,min;
    18     memset(vis,0,sizeof(vis));
    19     vis[beg]=1;
    20     for(i=0; i<n; i++)
    21     {
    22         lowcost[i]=cost[beg][i];
    23         path[i]=beg;
    24     }
    25     lowcost[beg]=0;
    26     path[beg]=-1;
    27     int pre=beg;
    28     for(i=1; i<n; i++)
    29     {
    30         min=INF;
    31         for(j=0; j<n; j++)
    32             //下面的加法可能导致溢出,INF不能取太大
    33             if(vis[j]==0&&lowcost[pre]+cost[pre][j]<lowcost[j])
    34             {
    35                 lowcost[j]=lowcost[pre]+cost[pre][j];
    36                 path[j]=pre;
    37             }
    38         for(j=0; j<n; j++)
    39             if(vis[j]==0&&lowcost[j]<min)
    40             {
    41                 min=lowcost[j];
    42                 pre=j;
    43             }
    44         vis[pre]=1;
    45     }
    46 }
    47 void Init()
    48 {
    49     int i,j;
    50     for(i=0; i<N; i++)
    51         for(j=0; j<N; j++)
    52             cost[i][j]=INF;
    53 }
    54 
    55 int main()
    56 {
    57  //  freopen("input.txt","r",stdin);
    58     int n,m,i,a,b,dis;
    59     while(cin>>n>>m&&!(n==0&&m==0))
    60     {
    61         Init();
    62         int lowcost[N];
    63         for(i=0; i<m; i++)
    64         {
    65             cin>>a>>b>>dis;
    66             if(cost[a-1][b-1]>dis)
    67                 cost[a-1][b-1]=cost[b-1][a-1]=dis;
    68         }
    69         Dijkstra(lowcost,n,0);
    70         cout<<lowcost[n-1]<<endl;
    71 //        if( lowcost[n-1] < 0x3F3F3F3F ) cout<<lowcost[n-1]<<endl;
    72 //        else cout<<"-1"<<endl;
    73     }
    74     return 1;
    75 }
  • 相关阅读:
    Linux (x86) Exploit 开发系列教程之三(Off-By-One 漏洞 (基于栈))
    Linux (x86) Exploit 开发系列教程之二(整数溢出)
    Linux (x86) Exploit 开发系列教程之一(典型的基于堆栈的缓冲区溢出)
    Linux (x86) Exploit 开发系列教程之四(使用return-to-libc绕过NX bit)
    xss level11
    f.select
    jquery.backstretch
    linux目录或文件权限
    pradino 命令
    Padrino 博客开发示例
  • 原文地址:https://www.cnblogs.com/panweishadow/p/3396074.html
Copyright © 2020-2023  润新知