最短路

作者: 三月黄橙 | 来源:发表于2018-10-24 17:09 被阅读0次
#include <cstdio>
#include <iotream>
#include <cstring>
#include <cmath>
#include <queue>
using namespace std;

const int MAXN = 1005;
const int MAXM = 1000005;

int n;

struct edge
{
    int to;
    int cost;
    int next;
};

edge grap[MAXM];
int head[MAXN], tol;

void init()
{
    tol = 0;
    memset(head, -1, sizeof(head));
}

void add(int u, int v, int c)
{
    grap[tol].to = v;
    grap[tol].cost = c;
    grap[tol].next = head[u];
    head[u] = tol++;
}


struct node
{
    int key, value;
    bool operator < (const node & ohter) const
    {
        return value > other.value;
    }
};

int dis_dij[MAXN];
void dijkstra(int s)
{
    bool vis[MAX];
    for(int i = 1; i <= n; i++)
    {
        dis_dij[i] = INF;
        vis[i] = false;
    }

    dis_dij[s] = 0;
    vis[s] = true;

    priority_queue <node> q;
    q.push((node){s, dis_dij[s]});

    while(!q.empty())
    {
        int u = q.top();
        q.pop();

        if(vis[u]) continue;
        vis[u] = true;

        for(int i = head[u]; i != -1; i = grap[u].next)
        {
            int v = grap[i].to;
            int c = grap[i].cost;

            if(!vis[v] && dis[v] > dis[u] + c)
            {
                dis[v] = dis[u] + c;
                q.push((node){v, dis[v]});
            }
        }
    }
}

int dis_spfa[MAXN];
void spfa(int s)
{
    bool vis[MAXN];
    for(int i = 1; i <= n; i++)
    {
        dis_spfa[i] = INF;
        vis[i] = false;
    }

    dis_spfa[s] = 0;
    vis[s] = true;

    queue <int> q;
    q.push(s);

    while(!q.empty())
    {
        int u = q.front();
        q.pop();
        vis[u] = false;

        for(int i = head[u]; i != -1; i = grap[i].next)
        {
            int v = grap[i].to;
            int c = grap[i].cost;
            if(dis[v] > dis[u] + c)
            {
                dis[v] = dis[u] + c;
                if(!vis[v])
                {
                    vis[v] = true;
                    q.push(v);
                }
            }
        }
    }
}

相关文章

  • 电力四种短路

    电力短路大如天,一旦发生破命钱 单相短路概率高,心中时刻设防线 三相短路最严重,预防发生常挂念 两相短路常发生,偶...

  • Floyd-Warshshall(未简化&数组版)

    解决多元最短路径问题(每两点之间的最短路):一次最外层循环表示借助一条边 初始化:d[i][i] = 0; 其他为...

  • 设计中的短路电流的校核

    短路电电流 一)为什么计算最大短路电流?为什么计算最小短路电流? 目的:测试对于短路计算意义的理解 答案:计算最大...

  • 遍历 最短路径 1.单源最短路 有权图-Dijkstra 多源头最短路-Floyd算法 —————————————...

  • 最短路径 之 Dijkstra 算法

    • 最短路径 之 Floyd 算法• 最短路径 之 Bellman 算法 Dijkstra算法是用于求解单源最短路...

  • 次短路算法

    次短路(一)从(父节点)到(子节点)次短路直接更新(通常在最短路已经确定的情况下才进行直接更新次短路)从(父节点)...

  • 短路

    公司动力车间,顾名思义就是为公司提供“动力”的单位。车间下设循环水站、电修班等几个站房,因为站房值班相对生...

  • 短路

    大概是每个月总有那么几天,提不起精神,会开始叨叨念念一些很久没有想起来的以前不开心的事情 所遭逢的不算是劫难的课程...

  • 短路

    First created on Jul.09.2015. All rights reserved. 本文原题《快...

  • 短路

    短路 旅人记事本 自然界的短路,多发生于因为介质的突变。造成信号或特质传输的中断,或非合理回路。 确容易造成物理损...

网友评论

      本文标题:最短路

      本文链接:https://www.haomeiwen.com/subject/igyxtqtx.html