zoukankan      html  css  js  c++  java
  • hdu 1863 [【最小生成树】+hdu2544【floyed】+hdu1874【dijdtra】~~~模板复习~~~

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863

    #include<stdio.h>
    #include<string.h>
    #define inf 0x3f3f3f3f
    #define N 120
    int book[N],w[N][N],min,dis[N];
    
    int main()
    {
        int m,n,i,j,t1,t2,t3,s,e,u,flag,sum;
        while(scanf("%d%d",&m,&n),m!=0)
        {
            for(i = 0; i <= n; i ++)
                for(j = 0; j <= n; j ++)
                    if(i == j)
                        w[i][j] = 0;
                    else
                        w[i][j] = inf;
            for(i = 1; i <= m; i ++)
            {
                scanf("%d%d%d",&t1,&t2,&t3);
                if(t3 < w[t1][t2])
                {
                    w[t1][t2] = t3;
                    w[t2][t1] = t3;
                }
            }
            if(m < n-1)
            {
                printf("?
    ");
                continue;
            }
            memset(book,0,sizeof(book));    
            for(i = 1; i <= n; i ++)
                dis[i] = w[1][i];
            book[1] = 1;
            sum = 0;
            for(i = 1; i < n; i ++)
            {
                min = inf;
                for(j = 1; j <= n; j ++)
                {
                    if(!book[j]&&dis[j] < min)
                    {
                        u = j;
                        min = dis[j];
                    }
                }
                book[u] = 1;
                sum += min;
                for(j = 1; j <= n; j ++)
                    if(!book[j]&&dis[j] > w[u][j])
                        dis[j] =  w[u][j];
            }
            flag = 0;
            for(i = 1; i <= n; i ++)
                if(!book[i])
                {
                    flag = 1;
                    break;
                }
            if(flag)
                printf("?
    ");
            else
                printf("%d
    ",sum);
        }
        return 0;
    }

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874

     

    #include<stdio.h>
    #include<string.h>
    #define inf 0x3f3f3f3f
    #define N 110
    int w[N][N];
    
    int main()
    {
        int n,m,i,j,k,t1,t2,t3;
        while(scanf("%d%d",&n,&m),n!=0&&m!=0)
        {
            for(i = 0; i <= n; i ++)
                for(j = 0; j <= n; j ++)
                    if(i == j)
                        w[i][j] = 0;
                    else
                        w[i][j] = inf;
            for(i = 1; i <= m; i ++)
            {
                scanf("%d%d%d",&t1,&t2,&t3);
                if(t3 < w[t1][t2])
                {
                    w[t1][t2] = t3;
                    w[t2][t1] = t3;
                }
                
            }
            for(k = 1; k <= n; k ++)
                for(i = 1; i <= n; i ++)
                    for(j = 1; j <= n; j ++)
                        if(w[i][j] > w[i][k]+w[k][j])
                            w[i][j] = w[i][k]+w[k][j];
            printf("%d
    ",w[1][n]);
        }
        return 0;
    }

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544

    #include<stdio.h>
    #include<string.h>
    #define inf 0x3f3f3f3f
    #define N 220
    int book[N],w[N][N],min,dis[N];
    
    int main()
    {
        int m,n,i,j,t1,t2,t3,s,e,u;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            for(i = 0; i <= n; i ++)
                for(j = 0; j <= n; j ++)
                    if(i == j)
                        w[i][j] = 0;
                    else
                        w[i][j] = inf;
            for(i = 1; i <= m; i ++)
            {
                scanf("%d%d%d",&t1,&t2,&t3);
                if(t3 < w[t1][t2])
                {
                    w[t1][t2] = t3;
                    w[t2][t1] = t3;
                }
            }
            scanf("%d%d",&s,&e);
            memset(book,0,sizeof(book));    
            for(i = 0; i < n; i ++)
                dis[i] = w[s][i];
            book[s] = 1;
            for(i = 1; i < n; i ++)
            {
                min = inf;
                for(j = 0; j < n; j ++)
                {
                    if(!book[j]&&dis[j] < min)
                    {
                        u = j;
                        min = dis[j];
                    }
                }
                book[u] = 1;
                for(j = 0; j < n; j ++)
                    if(!book[j]&&dis[j] > dis[u]+w[u][j])
                        dis[j] = dis[u] + w[u][j];
            }
            if(dis[e] == inf)
                printf("-1
    ");
            else
                printf("%d
    ",dis[e]);
        }
        return 0;
    }
  • 相关阅读:
    都是CSS惹的祸
    Ruby简介
    网络攻击利用DedeCms漏洞
    ASP.NET验证技术详解
    一个低级错误引发的血案
    FCKeditor配置和精简【附源码】
    邮件发送详解
    Timer定时器的设计实例详解
    常用的加密算法MD5、SHA1
    JS日历控件集合附效果图、源代码
  • 原文地址:https://www.cnblogs.com/hellocheng/p/7570049.html
Copyright © 2011-2022 走看看