• 最小生成树裸题(模板题)(学习题)——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);
    }
    }
  • 相关阅读:
    Nginx作为反向代理时传递客户端IP的设置方法
    通过VNC远程连接Linux实例
    【Office-Word妙手回春】Word文本秒转表格
    如何在Windows7安装U盘中加入USB3.0驱动的支持
    关注mainfest.mf的说明
    netty cs 过高优化
    查看MySql使用的数据库引擎
    DispatcherServlet--研究spring mvc 处理 流程必读源码
    PostConstruct,PreDestroy 注解处理器类 InitDestroyAnnotationBeanPostProcessor
    @autoware 注解处理器
  • 原文地址:https://www.cnblogs.com/huhuuu/p/1956435.html
Copyright © 2020-2023  润新知