zoukankan      html  css  js  c++  java
  • POJ- 1751 Highways

    题目链接:http://poj.org/problem?id=1751

    Sample Input
    9
    1 5
    0 0 
    3 2
    4 5
    5 1
    0 4
    5 2
    1 2
    5 3
    3
    1 3
    9 7
    1 2
    Sample Output
    1 6
    3 7
    4 9
    5 7
    8 3

    分析:某个地方政府想修建一些高速公路使他们每个乡镇都可以相同通达,不过以前已经修建过一些公路,现在要实现所有的联通,所花费的最小代价是多少?(也就是最小的修建长度),输出的是需要修的路,不过如果不需要修建就什么都不输出。

    一般的最小生成树,注意控制下标,输出来就好了

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<math.h>
     4 #include<algorithm>
     5 #include<iostream>
     6 #include<queue>
     7 #include<stdlib.h>
     8 using namespace std;
     9 
    10 #define N 12000
    11 #define INF 0x3f3f3f3f
    12 
    13 double maps[N][N],dist[N],c[N];
    14 int n,vis[N],v=0;
    15 
    16 struct node
    17 {
    18     int x,y;
    19 } p[N],q[N];
    20 
    21 void Init()
    22 {
    23     for(int i=1; i<=n; i++)
    24         for(int j=1; j<=n; j++)
    25             maps[i][j]=(i==j)?0:INF;
    26 }
    27 
    28 double Len(node a,node b)
    29 {
    30     int x=b.x-a.x;
    31     int y=b.y-a.y;
    32     double len=(double)sqrt(x*x+y*y);
    33     return len;
    34 }
    35 
    36 void Prim(int s)
    37 {
    38     vis[s]=1;
    39 
    40     for(int i=1; i<=n; i++)
    41     {
    42         dist[i]=maps[s][i];
    43         q[i].x=s,q[i].y=i;
    44     }
    45 
    46 
    47     for(int i=1; i<n; i++)
    48     {
    49         double Min=INF;
    50         int index=-1;
    51         for(int j=1; j<=n; j++)
    52         {
    53             if(!vis[j]&&Min>dist[j])
    54             {
    55                 Min=dist[j];
    56                 index=j;
    57             }
    58         }
    59         if(Min !=0)
    60            printf("%d %d
    ", q[index].x,q[index].y);
    61 
    62         vis[index]=1;
    63 
    64         for(int j=1; j<=n; j++)
    65             if(!vis[j]&&dist[j]>maps[index][j])
    66             {
    67                 dist[j]=maps[index][j];
    68                 q[j].x=index,q[j].y=j;
    69             }
    70     }
    71 }
    72 
    73 int main()
    74 {
    75     int i,j,m,a,b;
    76 
    77     scanf("%d", &n);
    78     Init();
    79 
    80     for(i=1; i<=n; i++)
    81         scanf("%d%d", &p[i].x,&p[i].y);
    82 
    83     for(i=1; i<n; i++)
    84         for(j=i+1; j<=n; j++)
    85             maps[i][j]=maps[j][i]=Len(p[i],p[j]);
    86 
    87 
    88     scanf("%d", &m);
    89 
    90     for(i=1; i<=m; i++)
    91     {
    92         scanf("%d%d", &a,&b);
    93         maps[a][b]=maps[b][a]=0;
    94     }
    95 
    96     Prim(1);
    97 
    98     return 0;
    99 }
  • 相关阅读:
    数值的扩展
    字符串的扩展
    变量的解构赋值整理
    let和const命令整理
    解析vue2.0中render:h=>h(App)的具体意思
    菜单栏的显示与隐藏
    vue的事件绑定
    CSS3实现3D地球自转行星公转
    MongoDB命令的简单操作(一)
    canvas扇形进度圈动态加载
  • 原文地址:https://www.cnblogs.com/weiyuan/p/5720473.html
Copyright © 2011-2022 走看看