zoukankan      html  css  js  c++  java
  • hdu-2544 最短路

    http://acm.hdu.edu.cn/showproblem.php?

    pid=2544

    入门级别   floyed和dijkstra都能够

    //Dijkstra
    #include<cstdio>
    #include<cstring>
    #define N 105
    #define inf 0xfffffff
    int dis[N],map[N][N],vis[N],n;
    void dijkstra()
    {
        int m,k;
        for(int i=1;i<=n;i++)
        {
            m=inf;
            for(int j=1;j<=n;j++)
            {
                if(!vis[j]&&dis[j]<m)
                {
                    m=dis[j];
                    k=j;
                }
            }
            if(m==inf) break;
            vis[k]=1;
            for(int j=1;j<=n;j++)
            {
                if(!vis[j])
                {
                    if(dis[j]>dis[k]+map[k][j])
                        dis[j]=dis[k]+map[k][j];
                }
            }
        }
    }
    int main()
    {
        int m,a,b,c;
        while(scanf("%d%d",&n,&m)!=EOF&&n&&m)
        {
            memset(vis,0,sizeof(vis));
            for(int i=1;i<=n;i++)
            {
                dis[i]=inf;
                for(int j=1;j<=n;j++)
                map[i][j]=inf;
            }
            for(int i=1;i<=m;i++)
            {
                scanf("%d%d%d",&a,&b,&c);
                map[a][b]=map[b][a]=c;
            }
            dis[1]=0;
            dijkstra();
            printf("%d
    ",dis[n]);
        }
        return 0;
    }


     

    / /floyed
     #include<cstdio>
    #define maxn 10001
    #define INF 0x3f3f3f3f
    int dis[maxn][maxn],n;
    void floyed()
    {
        int i,j,k;
        for(k=1;k<=n;k++)
            for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
            if(dis[i][j]>dis[i][k]+dis[k][j])
                dis[i][j]=dis[i][k]+dis[k][j];
    }
    
    void init()
    {
        int i,j;
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
            {
                if(i==j) dis[i][j]=0;
                else dis[i][j]=INF;
            }
    }
    int main()
    {
        int m;
        int a,b,c;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            if(n==0&&m==0) break;
            init();
            while(m--)
            {
                scanf("%d%d%d",&a,&b,&c);
                dis[a][b]=c;
                dis[b][a]=c;//路径是双向的
            }
            floyed();
            printf("%d
    ",dis[1][n]);
        }
        return 0;
    }


     

  • 相关阅读:
    oracle
    mysql的必知技巧
    sql_update
    sql查询
    Java 动态页面技术 之 jsp
    Java 会话技术 之 session
    Java 会话技术 之cookie
    Java HttpServletRequest
    Java HttpServletResponse
    Java Servlet接口、web.xml配置、HttpServlet父类
  • 原文地址:https://www.cnblogs.com/yfceshi/p/6993391.html
Copyright © 2011-2022 走看看