zoukankan      html  css  js  c++  java
  • POJ 1258

    http://poj.org/problem?id=1258

    今天晚上随便找了两道题,没想到两道都是我第一次碰到的类型———最小生成树。我以前并没有见过,也不知道怎么做,然后就看书,思路很容易理解

    但我最开始确想错了,我想成每一个点只可以连接一个或者两个地方,所以那样写出来的答案根本就是错误的,也不是这个树所表达的意思

    最后多次对书上的算法接合案例一步一步的进行推倒,才发现我的想法是错了,用了一个多小时

     1 #include <stdio.h>
     2 #include <string.h>
     3 
     4 
     5 #define inf 100009
     6 
     7 bool mark[1001];
     8 int a[1001][1001],dis[1001],ans,n;
     9 
    10 int prim()
    11 {
    12    for(int i=1;i<=n;i++)
    13     dis[i]=inf;dis[1]=0;
    14     for(int i=1;i<=n;i++){        //其内涵就是用dis数组来记录下每一列的最小的长度,然后加起来也便是最小的长度
    15         int tep=inf;int k=0;
    16         for(int j=1;j<=n;j++){
    17             if(mark[j]&&dis[j]<tep)   //有n个相连的话,最短需要连接n-1次,也可以看出是连接n次,那就是还有一个是自己连接自己,长度为0。
    18             {
    19                 tep=dis[j];
    20                 k=j;
    21             }
    22         }
    23         if(tep==inf) return 0;
    24         ans+=tep;
    25         mark[k]=false;
    26         for(int j=1;j<=n;j++)
    27             if(mark[j]&&dis[j]>a[k][j]) 
    28                 dis[j]=a[k][j];
    29        }
    30    return 0;
    31 }
    32 
    33 int main()
    34 {
    35     while(scanf("%d",&n)!=EOF)
    36     {
    37         memset(mark,true,sizeof(mark));
    38         ans=0;
    39         for(int i=1;i<=n;i++)
    40             for(int j=1;j<=n;j++)
    41                 scanf("%d",&a[i][j]);
    42         prim();
    43         printf("%d
    ",ans);
    44     }
    45 }
  • 相关阅读:
    c# winform treelistview的使用(treegridview)
    基于Windows服务的聊天程序
    .Net Core集成Office Web Apps(二)
    .Net Core集成Office Web Apps(一)
    .Net页面局部更新的思考
    C#下载歌词文件
    jquery导航栏
    Select2下拉框总结
    数位dp入门(内容一样,新版格式)
    我的emacs简易配置
  • 原文地址:https://www.cnblogs.com/Tree-dream/p/5402571.html
Copyright © 2011-2022 走看看