zoukankan      html  css  js  c++  java
  • POJ1502(MPI Maelstrom)

    题目链接

    最短路的题,直接用dijkstra即可。此题比较有技巧性的地方在数据读入的处理,题中给出的是邻接矩阵的下三角,其中不直接邻接的边用字符x表示,其他地方用整数表示边长。具体做法见代码(参考了discuss)。

    View Code
     1 #include <stdio.h>
     2 #include <string.h>
     3 #define MIN(a,b) ((a)<(b)?(a):(b))
     4 #define MAX(a,b) ((a)>(b)?(a):(b))
     5 #define N 101
     6 #define INF 0x7ffffff
     7 int g[N][N],n;
     8 int dist[N];
     9 char vis[N];
    10 void dijkstra(int u)
    11 {
    12     int i,v,k,min;
    13     memset(vis,0,sizeof(vis));
    14     for(i=0;i<n;i++)    dist[i]=(i==u?0:INF);
    15     for(i=0;i<n;i++)
    16     {
    17         min=INF;
    18         for(v=0;v<n;v++)    if(!vis[v]&&dist[v]<=min)   min=dist[k=v];
    19         vis[k]=1;
    20         for(v=0;v<n;v++)    dist[v]=MIN(dist[v],dist[k]+g[k][v]);
    21     }
    22 }
    23 int main()
    24 {
    25     int i,j,t,ans;
    26     while(~scanf("%d",&n))
    27     {
    28         for(i=0;i<n;i++)
    29         {
    30             for(j=i+1;j<n;j++)  g[i][j]=g[j][i]=INF;
    31         }
    32         for(i=1;i<n;i++)
    33         {
    34             for(j=0;j<i;j++)
    35             {
    36                 if(scanf("%d",&t))  g[i][j]=g[j][i]=t;
    37                 else    scanf("x");
    38             }
    39         }
    40         dijkstra(0);
    41         ans=0;
    42         for(i=1;i<n;i++)    ans=MAX(ans,dist[i]);
    43         printf("%d\n",ans);
    44     }
    45     return 0;
    46 }
  • 相关阅读:
    ef左联三张表案例
    sql常用语句汇总
    最初的ajax案例
    asp.net mvc请求响应模型原理回顾
    viewstate cookie和session原理回顾
    一般处理程序装配数据到html页的原理
    asp.net页面生命周期回顾
    rocketMQ 消息的 tag
    rocketMQ 订阅关系
    rocketMQ retry 消息的实现
  • 原文地址:https://www.cnblogs.com/algorithms/p/2464935.html
Copyright © 2011-2022 走看看