zoukankan      html  css  js  c++  java
  • 最短路<dijk>

    题意:

    有n个城市,有m条路,给出每条路的出发和结束的城市及长度,求从第一个城市到最后一个城市的最短路。按格式输出。
    

    power oj 2443

    题解:

    标准dijk算法。
    
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<iostream>
    using namespace std;
    const int INF=0x3f3f3f3f;
    const int maxn=505;
    typedef long long LL;
    int W[maxn][maxn];
    int  vis[maxn];
    int dis[maxn];
    int n,m;
    void init()
    {
        for(int i=0;i<maxn;i++)
        {
            for(int j=0;j<maxn;j++)
                W[i][j]=INF;
            W[i][i]=0;
        }
        memset(vis,0,sizeof(vis));
    }
    
    void dijk()
    {
        for(int i=0;i<n;i++) dis[i]=(i==0?0:INF);
        for(int i = 0;i < n;i++)
        {
            int m = INF , x=0;
            for(int y = 0;y <n;y++) if(!vis[y] && dis[y] <= m) m = dis[x=y];
            vis[x] = true;
            for(int y = 0;y < n;y++) dis[y]=min(dis[y],dis[x]+W[x][y]);
        }
    }
    int main()
    {
        double sp1,sp2;
        int u,v,d;
        while(~scanf("%d%d",&n,&m))
        {
            init();
            for(int i=0;i<m;i++)
            {
                scanf("%d%d%d",&u,&v,&d);
                if(W[u][v]>d&&u!=v)
                    W[u][v]=W[v][u]=d;
            }
            dijk();
            scanf("%lf%lf",&sp1,&sp2);
            if(dis[n-1]>=INF)
                printf("There is a tie!
    ");
            else
            {
                printf("%.1lf %.1lf
    ",(double)dis[n-1]/sp1+10.00,(double)dis[n-1]/sp2);
            }
        }
        return 0;
    }
    
    想的太多,做的太少。
  • 相关阅读:
    Windows下PATH等环境变量详解
    html表单,做个申请邮箱界面练习。
    截取字符串,去空格的练习。
    for循环
    c# if else的练习,判断闰年,输入日期,输出这是今年的的多少天!
    HTML
    输入输出2
    输入输出练习1
    Map练习
    数据库设计范式
  • 原文地址:https://www.cnblogs.com/pealicx/p/6115629.html
Copyright © 2011-2022 走看看