• POJ 1751 Highways


    题意:n个城市,然后把n个城市的坐标都给你,然后给你m条已经修好的道路,然后给出m个已经修好道路的城市a,b,

    However, they want to guarantee that every town is highway-reachable from every other town.

    他们保证任何城市都是可以通过其他城市到达的

    很明显是个最小生成树问题、

    最后让你输出所有需要另外加的道路连接的两个城市a b、

    思路:先对所有n个城市求一遍距离、然后对已经修好道路的城市赋值为0、输出的时候要使用一下前驱数组(用来记录一个点的前驱是哪一个点)

     1 #include<cmath>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 const int qq=800;
     7 const int MAX=1e8;
     8 int n,m,sum;
     9 int map[qq][qq];
    10 int cost[qq+300];
    11 int vis[qq];
    12 int pre[qq];
    13 int x[qq],y[qq];
    14 void prim()
    15 {
    16     memset(vis,0,sizeof(vis));
    17     for(int i=1;i<=n;++i){
    18         cost[i]=map[1][i];
    19         pre[i]=1;            //初始化前驱、因为刚开始加的1,所以将每一个点的前驱设置为1 
    20     }        
    21     vis[1]=1;
    22     int minx,k;
    23     for(int i=1;i<=n;++i){
    24         minx=MAX;
    25         for(int j=1;j<=n;++j)
    26             if(!vis[j] && cost[j]<minx)
    27                 minx=cost[k=j];
    28         if(map[pre[k]][k])    printf("%d %d
    ",pre[k],k);    //当道路不存在时,输出前驱、 
    29         vis[k]=1;
    30         for(int j=1;j<=n;++j)
    31             if(map[k][j]<cost[j]){
    32                 cost[j]=map[k][j];
    33                 pre[j]=k;        //更新前驱、 
    34             }    
    35     }
    36 }
    37 int main()
    38 {
    39     scanf("%d",&n);
    40     int i,j,a,b;
    41     for(i=1;i<=n;++i){
    42         scanf("%d%d",&x[i],&y[i]);
    43         for(j=1;j<i;++j){
    44             if(i==j)    map[i][j]=MAX;
    45             else        map[i][j]=map[j][i]=(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]);
    46         }
    47     }
    48     scanf("%d",&m);
    49     for(i=1;i<=m;++i){
    50         scanf("%d%d",&a,&b);
    51         map[a][b]=map[b][a]=0;
    52     }
    53     prim();    
    54     return 0;
    55 }

  • 相关阅读:
    笔试算法题(51):简介
    笔试算法题(50):简介
    笔试算法题(49):简介
    笔试算法题(48):简介
    笔试算法题(47):简介
    笔试算法题(46):简介
    SQL Server 笔记
    SQL Server 2008 安装重启电脑失败
    列举某个目录文件
    Linux LAMP 配置
  • 原文地址:https://www.cnblogs.com/sasuke-/p/5453283.html
Copyright © 2020-2023  润新知