首页 > 其他分享 >8/4 dijkstra

8/4 dijkstra

时间:2023-08-04 17:15:12浏览次数:39  
标签:dist struct int vis dijkstra hn zz

最短路径(迪科斯特算法模板)

#include<bits/stdc++.h>
using namespace std;

int n,m,s;
bool vis[10005];
int INF=0x3f3f3f3f;
int d[10005];

struct node{
    int v,w;
}; 
vector<node> G[1005];

struct hn{
    int u,dist;
    hn(int _u,int _dist){
        u=_u;
        dist=_dist;
    }
};

struct cmp{
    bool operator()(hn a,hn b){
        return a.dist>b.dist;
    }
};

priority_queue<hn,vector<hn>,cmp>q;


void dijkstra(){
    memset(vis,false,sizeof(vis));
    memset(d,INF,sizeof(d));
    d[s]=0;
    q.push(hn(s,0));
    while(q.size()){
        int x=q.top().u;
        q.pop();
        vis[x]=true;
        
        for(int i=0; i<G[x].size(); i++){
            int y=G[x][i].v;
            int z=G[x][i].w;
            if(!vis[y] && d[x]+z<d[y]){
                d[y]=d[x]+z;
                q.push(hn(y,d[y]));
            }
        }
    }
}

int main(){
    cin>>n>>m>>s;
    for(int i=1; i<=m; i++){
        int xx,yy,zz;
        cin>>xx>>yy>>zz;
        G[xx].push_back({yy,zz});
        G[yy].push_back({xx,zz});
    }
    dijkstra();
    for(int i=1; i<=n; i++){
        cout<<d[i]<<" ";
    }
    cout<<endl;
    return 0;
}

单源最短路

#include<bits/stdc++.h>
using namespace std;

int n,m,s,t;
bool vis[100005];
int INF=0x3f3f3f3f;
int d[100005];

struct node{
    int v,w;
}; 
vector<node> G[10005];

struct hn{
    int u,dist;
    hn(int _u,int _dist){
        u=_u;
        dist=_dist;
    }
};

struct cmp{
    bool operator()(hn a,hn b){
        return a.dist>b.dist;
    }
};

priority_queue<hn,vector<hn>,cmp>q;


void dijkstra(){
    memset(vis,false,sizeof(vis));
    memset(d,INF,sizeof(d));
    d[s]=0;
    q.push(hn(s,0));
    while(q.size()){
        int x=q.top().u;
        q.pop();
        vis[x]=true;
        
        for(int i=0; i<G[x].size(); i++){
            int y=G[x][i].v;
            int z=G[x][i].w;
            if(!vis[y] && d[x]+z<d[y]){
                d[y]=d[x]+z;
                q.push(hn(y,d[y]));
            }
        }
    }
}

int main(){
    cin>>n>>m>>s>>t;
    for(int i=1; i<=m; i++){
        int xx,yy,zz;
        cin>>xx>>yy>>zz;
        G[xx].push_back({yy,zz});
        G[yy].push_back({xx,zz});
    }
    dijkstra();
    cout<<d[t]<<endl;
    return 0;
}

信使

#include<bits/stdc++.h>
using namespace std;

int n,m,s;
bool vis[10005];
int INF=0x3f3f3f3f;
int d[10005];

struct node{
    int v,w;
}; 
vector<node> G[1005];

struct hn{
    int u,dist;
    hn(int _u,int _dist){
        u=_u;
        dist=_dist;
    }
};

struct cmp{
    bool operator()(hn a,hn b){
        return a.dist>b.dist;
    }
};

priority_queue<hn,vector<hn>,cmp>q;


void dijkstra(){
    memset(vis,false,sizeof(vis));
    memset(d,INF,sizeof(d));
    d[1]=0;
    q.push(hn(1,0));
    while(q.size()){
        int x=q.top().u;
        q.pop();
        vis[x]=true;
        
        for(int i=0; i<G[x].size(); i++){
            int y=G[x][i].v;
            int z=G[x][i].w;
            if(!vis[y] && d[x]+z<d[y]){
                d[y]=d[x]+z;
                q.push(hn(y,d[y]));
            }
        }
    }
}

int main(){
    cin>>n>>m;
    for(int i=1; i<=m; i++){
        int xx,yy,zz;
        cin>>xx>>yy>>zz;
        G[xx].push_back({yy,zz});
        G[yy].push_back({xx,zz});
    }
    int ans=INT_MIN;
    dijkstra();
    for(int i=1; i<=n; i++){
        ans=max(ans,d[i]);
    }
    cout<<ans<<endl;
    return 0;
}

 

标签:dist,struct,int,vis,dijkstra,hn,zz
From: https://www.cnblogs.com/dxy09tj/p/17606479.html

相关文章

  • dijkstra算法
    【USACO】热浪#include<bits/stdc++.h>usingnamespacestd;structnode{ intu,dist; node(int_u,int_dist) { u=_u; dist=_dist; }};structnode2{ intv,w; node2(int_v,int_w) { v=_v; w=_w; }};structcmp{ booloperator()(nodea,nod......
  • 浅谈 dijkstra 与其它文章并没有谈到的一些问题
    讲一个小故逝今天做到了一道很典的题目P1875,我发现我其实并不太会,然后在我看完了题解剽题解的屑以后,我发现我对dijkstra的理解仅仅停留在它的过程,而没有深入挖掘dijkstra的正确性以及它的本质等等。所以这篇文章会从另一个角度来看看dijkstra。也许这是dijkstra的本质吧,还......
  • Dijkstra 算法——求解最短路径问题
    Dijkstra算法——求解最短路径问题  迪杰斯特拉算法(Dijkstra'salgorithm)是一种用于解决单源最短路径问题的贪心算法。它可以找到从一个起始顶点到其他所有顶点的最短路径,并且适用于边的权重非负的图。算法步骤如下:创建一个数组dist,用于保存起始顶点到其他顶点的最短距离......
  • 最短路之dijkstra算法
    dijkstra比之上次介绍的的bellman-ford算法的用途上最大的区别就是dijkstra只可用于求无负权边图中的最短路,堆优化后的dij比bellman-ford的复杂度(mn)更小(mlogn)代码源关于dijkstra的解释简单来讲就是每次选出一个没被选过的离起点最近的点,松弛这个点所在的每个边,直到所有点都被......
  • 2023Tsinghua-HKUSTA G <最短路 Dijkstra>
    题目G.TreasureHuntinMaze代码Code//<堆优化dijkstra>//分别从起点和终点进行dijkstra,得到i,j到起点和终点的最短距离和最短路径数,//则最短路为dis0[x][y]+dis1[x][y],最短路径数为cnt0[x][y]*cnt1[x][y]#include<iostream>#include<algorithm>#incl......
  • 【改进蚁群算法】 蚁群算法 Dijkstra算法 遗传算法 人工势场法实现二维 三维空间路径
    【改进蚁群算法】蚁群算法Dijkstra算法遗传算法人工势场法实现二维三维空间路径规划本程序为改进蚁群算法+Dijkstra算法+MAKLINK图理论实现的二维空间路径规划 算法实现:原创文章,转载请说明出处,资料来源:http://imgcs.cn/5c/636749258569.html1)基于MAKLINK图理论生成地图,并对......
  • 算法——最短路径算法(dijkstra)
    source源端,target目的端1.构造n*n的相邻矩阵,-1表示未相邻intmatrix[n][n]intdist[n]初始化各节点直接到source的距离,dist[source]=0;boolvisited[n]是否访问过dist[source]=0;for(inti=0;i<n-1;i++){//找剩余n-1个节点的距离in......
  • 数据结构--Dijkstra算法最清楚的讲解
    迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止###基本思想通过Dijkstra计算图G中的最短路径时,需要指定起点s(即从顶点s开始计算)。此外,引进两个集合S和U。S的......
  • python dijkstra 最短路算法示意代码
     defdijkstra(graph,from_node,to_node):q,seen=[(0,from_node,[])],set()whileq:cost,node,path=heappop(q)seen.add(node)path=path+[node]ifnode==to_node:returncost,pathfora......
  • hdu-2680-Choose the best route(dijkstra)
    ChoosethebestrouteTimeLimit:2000/1000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):10470    AcceptedSubmission(s):3367ProblemDescriptionOneday,Kikiwantstovisitoneofherfriends.Assheis......