zoukankan      html  css  js  c++  java
  • 【POJ】[1251]Jungle Roads

    这里写图片描述

    知道是最小生成树
    都懒得再一句一句翻译题目了……

    由题目描述
    这里用Prim更好一些
    因为村庄数比较少
    ……吐槽一下
    现在见多了
    英语还真是好多了
    扫一下还真能差不多看懂

    这里使用数组然后字符减’A’的形式直接来储存

    另外这里的输入数据涉及到字符 空格 换行什么的 有点坑……
    嗯……应该说很坑……
    算法一点没问题……卡在输入数据动弹不得……
    舍本逐末嘛!

    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    int main() {
        int dis[27];
        int e[27][27];
        bool flag[27];
        int N,inf=999999;
        while(scanf("%d",&N),N) {
            getchar();
            for(int i=1; i<=N; i++) {
                dis[i]=inf;
                flag[i]=false;
            }
            for(int i=1; i<=N; i++) {
                for(int j=1; j<=N; j++) {
                    e[i][j]=inf;
                }
            }
            for(int i=1; i<N; i++) {
                char c;
                int n;
                scanf(" %c %d",&c,&n);
                while(n--) {
                    char c2;
                    int t2;
                    scanf(" %c %d",&c2,&t2);
                    e[c-'A'+1][c2-'A'+1]=t2;
                    e[c2-'A'+1][c-'A'+1]=t2;
                }
            }
            /*
            这种输入方法POJ会超时……
            不过杭电可以过 
                    for(int i=1; i<N; i++) {
                        char c;
                        int n;
                        scanf("%c %d",&c,&n);
                        while(n--) {
                            char c2;
                            int t2;
                            getchar();
                            scanf("%c %d",&c2,&t2);
                            e[c-'A'+1][c2-'A'+1]=t2;
                            e[c2-'A'+1][c-'A'+1]=t2;
                        }
                        getchar();
                    }
            */
            int sum=0;
            dis[1]=0;
            while(true) {
                int v=-1;
                for(int u=1; u<=N; u++) {
                    if(!flag[u]&&(v==-1||dis[u]<dis[v]))
                        v=u;
                }
                if(v==-1)
                    break;
                flag[v]=true;
                sum+=dis[v];
                for(int u=1; u<=N; u++) {
                    dis[u]=min(dis[u],e[v][u]);
                }
            }
            printf("%d
    ",sum);
        }
        return 0;
    }
    

    题目地址:
    【POJ】[1251]Jungle Roads
    【杭电】[1301]Jungle Roads

  • 相关阅读:
    阿里巴巴java开发手册学习
    策略模式
    windows常用技巧
    nginx学习
    Tomcat入门
    ThreadPoolTaskExecutor的简单使用
    linux服务器测试性能
    HAProxy1.5.x tcp example
    Haproxy开启日志
    Fix rpmdb: Thread died in Berkeley DB library
  • 原文地址:https://www.cnblogs.com/BoilTask/p/12569774.html
Copyright © 2011-2022 走看看