zoukankan      html  css  js  c++  java
  • Dijkstra算法(求一点到任意一点的最短距离)

    思路:先找出最短的一个点,也就是起点,从起点出发,找最短的边,同时标记起点为true(代表已经访问过),访问过的点就不用再访问了,依次下去,保证每一次找到的边都是最短的边

    到最后没有边可以更新了就代表结束

    看代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<stdio.h>
    #include<string.h>
    #include<cmath>
    #include<math.h>
    #include<algorithm>
    #include<set>
    #include<queue>
    #include<map>
    typedef long long ll;
    using namespace std;
    const ll mod=1e9+7;
    const int maxn=1e3+10;
    const int maxk=100+10;
    const int maxx=1e4+10;
    const ll maxe=1000+10;
    #define INF 0x3f3f3f3f3f3f
    int v,e;
    ll cost[maxn][maxn];//cost[u][v]代表边(u,v)的权值
    ll d[maxn];//从起点出发到该点的最小距离
    bool vis[maxn];
    void solve(int s)
    {
        for(int i=0;i<v;i++)
        {
            d[i]=INF;
        }
        memset(vis,false,sizeof(vis));
        d[s]=0;
        while(true)
        {
            int flag=-1;
            for(int i=0;i<v;i++)
            {
                //在所有点中找尚未使用的最小距离的点
                if(!vis[i]&&(flag==-1||d[i]<d[flag]))
                flag=i;
            }
            if(flag==-1)
                break;
            vis[flag]=true;
            for(int i=0;i<v;i++)
            {
                d[i]=min(d[i],d[flag]+cost[flag][i]);
            }
        }
        for(int i=0;i<v;i++)
            cout<<d[i]<<" ";
        cout<<endl;
    }
    int main()
    {
        ios::sync_with_stdio(false);
        cin>>v>>e;
        for(int i=0;i<v;i++)
        {
            for(int j=0;j<v;j++)
                cost[i][j]=INF;
        }
        int a,b,va;
        for(int i=0;i<e;i++)
        {
            cin>>a>>b>>va;
            cost[a][b]=va;
        }
        solve(0);
        return 0;
    }
    当初的梦想实现了吗,事到如今只好放弃吗~
  • 相关阅读:
    JDBC(三)、基础代码及优化
    JDBC(二)、注册驱动三种实现原理
    JDBC(一)、数据库存取的三种
    Java学习笔记(四) 运算符
    Java学习笔记(三) 基础语法
    Java学习笔记(二) 第一个程序
    Java学习笔记(一) Java 概述
    JqGrid自定义获取编辑中单元格的值
    移动前端开发之viewport的深入理解
    CSS学习笔记--提示工具(Tooltip)
  • 原文地址:https://www.cnblogs.com/caijiaming/p/9381476.html
Copyright © 2011-2022 走看看