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

    View Code 
    #include <iostream>
    using namespace std;

    const int inf=999999999;

    int N,E;
    int dis[100];
    bool used[100];
    int map[100][100];

    int dijk(int s,int e)
    {
        memset(dis,255,sizeof(dis)); //初始化为-1,表示不可达
        memset(used,0,sizeof(used)); //均标记为未被访问
        
        dis[s]=0;
        used[s]=true;//标记s点
        
        int i,j;
        for(i=1;i<=N;i++)
        {
            if(i!=s)
            {
                if(map[s][i]!=-1)
                    dis[i]=map[s][i]; //为dis数组赋值
            }
        }
        for(i=1;i<N;i++)
        {
            
            int next;
            int min=inf;
            for(j=1;j<=N;j++)
            {
                if(!used[j] && dis[j]!=-1 && dis[j]<min) //未访问 相邻点 距离近
                {
                    min=dis[j];
                    next=j;
                }
            }
            
            used[next]=true//加入
            
            for(j=1;j<=N;j++)
            {
                if(!used[j] && map[next][j]!=-1 && (dis[next]+map[next][j]<dis[j] || dis[j]==-1)) //未访问 相邻点 距离变近
                {
                    dis[j]=dis[next]+map[next][j]; //修改
                }
            }
        }
        return dis[e];
    }

    int main()
    {
        memset(map,255,sizeof(map));
        cin>>N>>E;
        int i;
        int s,t,d;
        for(i=0;i<E;i++)
        {
            cin>>s>>t>>d;
            map[s][t]=d;
            map[t][s]=d;
        }

        int start,end;
        while(cin>>start>>end)
            cout<<dijk(start,end)<<endl;
        return 0;

    这是自己又一次写dijkstra算法了,希望能够渐渐熟练起来... 

  • 相关阅读:
    C# 监测每个方法的执行次数和占用时间(测试1)
    C# 依赖注入那些事儿
    SQL Server GROUP BY 后 拼接 字符串
    C# 根据Excel生成树
    C# 反射赋值
    C# 集合转换为DataTable
    Oracle 未能加载文件或程序集Oracle.DataAccess
    MySQL 各种主流 SQLServer 迁移到 MySQL 工具对比
    平衡树
    数据结构优化dp
  • 原文地址:https://www.cnblogs.com/Knuth/p/2191788.html
Copyright © 2011-2022 走看看