• 最大生成树+全树的判断——pku2377


    求最小树,map[][]初始都为MAX
    求最大树,map[][]初始都为0,prim函数再改下就ok了
    判断全树是通过判断顶点是否都遍历了,即use[]1到n是否都为1
    View Code
    #include<stdio.h>

    #define MAX 0x3fffffff
    int map[1005][1005],dis[1005];
    bool use[1005];
    int n,m;

    void prim(int start)
    {
    int max,rj,i,j,add;
    for(j=1;j<=n;j++)
    {
    dis[j]
    =map[1][j];
    use[j]
    =0;
    }
    use[
    1]=1;
    add
    =0;
    for(i=1;i<n;i++)
    {
    max
    =0;
    for(j=1;j<=n;j++)
    {
    if(use[j]==1)continue;
    if(dis[j]>max)
    {
    max
    =dis[j];
    rj
    =j;
    }
    }

    use[rj]
    =1;
    add
    +=max;
    for(j=1;j<=n;j++)
    {
    if(use[j]==1)continue;
    if(dis[j]<map[rj][j])
    dis[j]
    =map[rj][j];
    }
    }
    for(i=1;i<=n;i++)//判断全树是否形成
    {
    if(use[i]==0)
    break;
    }
    if(i==n+1)
    printf(
    "%d\n",add);
    else
    printf(
    "-1\n");
    }

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

    for(i=1;i<=m;i++)
    {
    scanf(
    "%d%d",&a,&b);
    scanf(
    "%d",&temp);
    if(temp>map[a][b])
    {
    map[b][a]
    =temp;
    map[a][b]
    =temp;//重边的情况,加着总没错
    }
    }

    prim(
    1);
    }
    }
  • 相关阅读:
    8 Range 对象
    7 Worksheet 对象
    6 Workbook 对象
    5 Application 对象
    Windows路径
    windows 下操作目录(使用DOS命令)
    Windows 批处理
    6 WPF控件
    Lexer and parser generators (ocamllex, ocamlyacc)
    4.9 Parser Generators
  • 原文地址:https://www.cnblogs.com/huhuuu/p/1957808.html
Copyright © 2020-2023  润新知