zoukankan      html  css  js  c++  java
  • 最短路

    hdoj2544

    题目大意:给出两点和两点之间的时间代价,求出从起点到终点的最小时间 

    解决:与hdoj 1874一模一样,地杰斯特拉算法求距离

    #include <iostream>
    using namespace std;
    int n;
    #define N 100
    #define MAX 0x3f3f3f3f
    int cost[N+10][N+10];
    int vis[N+10];
    int dist[N+10];
    void init()
    {
        for(int i=1;i<=n;i++)
          for(int j=1;j<=n;j++)
          cost[i][j]=MAX;
    }
    void dijikstra()
    {
        int v0=1;
        for(int i=1;i<=n;i++)
        {
            vis[i]=false;
            dist[i]=cost[v0][i];
        }
        vis[v0]=true;
        dist[v0]=0;//就算是v0到v0也能保证输出正确结果
        for(int i=1;i<n;i++)
        {
            int min=MAX;
            for(int j=2;j<=n;j++)
            {
                if(!vis[j] && dist[j]<min){min=dist[j];v0=j;}
            }
            vis[v0]=true;
            for(int j=2;j<=n;j++)
            if(!vis[j] && min+cost[v0][j]<dist[j])dist[j]=min+cost[v0][j];
        }
    }
    int main()
    {
        int m;
        while(cin>>n>>m,n||m)
        {
            int a,b,w;
            init();
            for(int i=0;i<m;i++)
            {
                cin>>a>>b>>w;
               //必须进行下边的判断,否则结果错误,因为有重复的边输入
                if(w<cost[a][b]){cost[a][b]=cost[b][a]=w;}
            }
            dijikstra();
            cout<<dist[n]<<endl;
        }
     //   system("pause");
        return 0;
    }
    

  • 相关阅读:
    oracle11g安装客户端检查先决条件失败
    WinForm textbox 只允许输入数字
    Oracle存储过程
    Oracle游标
    Oracle之PL/SQL流程控制
    Oracle 变量
    log4net 使用
    Python Matplotlib 画图显示中文问题
    Oracle 数据迁移到 SQL Server
    C结构体【转】
  • 原文地址:https://www.cnblogs.com/hpustudent/p/2137029.html
Copyright © 2011-2022 走看看