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;
    }
    当初的梦想实现了吗,事到如今只好放弃吗~
  • 相关阅读:
    sed命令
    awk命令
    let命令
    首先看一下友晶DE-SOC开发板的user manual
    嵌入式FIFO核的调用
    嵌入式ROM核的调用
    用嵌入式块RAM IP核配置一个双口RAM
    如何利用Visio设计一个系统的结构图
    uart通讯协议
    按键消抖试验及一个数码管电子时钟的设计
  • 原文地址:https://www.cnblogs.com/caijiaming/p/9381476.html
Copyright © 2011-2022 走看看