zoukankan      html  css  js  c++  java
  • 最小生成树裸题(模板题)(学习题)——PKU1258

    用枚举算法做,思想还是比较简单的:(比较朴素的思想,没优化过)

    1、一共找n-1条边形成最小生成树

    {

    2、枚举i寻找第i条边是遍历过的点

    3、枚举j寻找第j条没被遍历过的点

    在枚举符合条件【i,j】的同时找出最短的边

    }//一共枚举了n-1,然后最小生成树就诞生了……

    时间复杂度是(顶点^3)
    PRIM思想:
    FOR()一点为起点,与所有点连线,距离保存在dis[]里,起点标记
    for(i->(n-1)) 一共连n-1条边
    {
      FOR()//找dis[]最短的边
      保存距离,标记
      FOR()//更新没被标记的最短边,注意与最短路不同,dis[i]是保存到i的最短边,而最短路中是保存到i的最短路径,其实与dijk算法还是比较像……
    }
    View Code
    #include<stdio.h>

    #define MAX 0x3fffffff
    int map[102][102],dis[102];
    bool use[102];

    int main()
    {
    int n,i,j;
    while(scanf("%d",&n)!=EOF)
    {
    for(i=1;i<=n;i++)
    {
    for(j=1;j<=n;j++)
    {
    scanf(
    "%d",&map[i][j]);
    }
    }

    //prim
    int min,add=0,rj;
    for(j=1;j<=n;j++)
    {
    dis[j]
    =map[1][j];
    use[j]
    =0;
    }
    use[
    1]=1;
    for(i=1;i<n;i++)
    {
    min
    =MAX;
    for(j=1;j<=n;j++)
    {
    if(use[j]==0&&min>dis[j])
    {
    min
    =dis[j];
    rj
    =j;
    }
    }

    add
    +=min;
    use[rj]
    =1;
    for(j=1;j<=n;j++)
    {
    if(use[j]==0&&dis[j]>map[rj][j])
    dis[j]
    =map[rj][j];
    }
    }

    printf(
    "%d\n",add);
    }
    }
    上面的代码时间复杂度是(顶点^2)
    小小的改变这样提交可以达到0MS
    View Code
    #include<stdio.h>

    #define MAX 0x3fffffff
    int map[102][102],dis[102];
    bool use[102];

    int main()
    {
    int n,i,j;
    while(scanf("%d",&n)!=EOF)
    {
    for(i=1;i<=n;i++)
    {
    for(j=1;j<=n;j++)
    {
    scanf(
    "%d",&map[i][j]);
    }
    }

    //prim
    int min,add=0,rj;
    for(j=1;j<=n;j++)
    {
    dis[j]
    =map[1][j];
    use[j]
    =0;
    }
    use[
    1]=1;
    for(i=1;i<n;i++)
    {
    min
    =MAX;
    for(j=1;j<=n;j++)
    {
    if(use[j]!=0)continue;
    if(min>dis[j])
    {
    min
    =dis[j];
    rj
    =j;
    }
    }

    add
    +=min;
    use[rj]
    =1;
    for(j=1;j<=n;j++)
    {
    if(use[j]!=0)continue;
    if(dis[j]>map[rj][j])
    dis[j]
    =map[rj][j];
    }
    }

    printf(
    "%d\n",add);
    }
    }
  • 相关阅读:
    20181020遭遇战
    二分图最大分配
    2019.11.11 洛谷月赛t3
    2019.10.29 CSP%您赛第四场t2
    2019.10.28 CSP%您赛第四场t3
    2019.10.26 CSP%您赛第三场
    2019.10.24 CSP%你赛第二场d1t3
    0080-简单的排序
    0079-简单的循环
    0078-求最大因子
  • 原文地址:https://www.cnblogs.com/huhuuu/p/1956435.html
Copyright © 2011-2022 走看看