求算法名

P4779 【模板】单源最短路径(标准版)

diamond_153 @ 2022-12-18 12:04:57

自己想了一个特别拉跨的算法,32pts,不能过题,如果我这个算法有名字求大佬告诉我:

#include<iostream>
#include<map>
#include<vector>
#include<list>
#include<utility>
#define int long long
using namespace std;
int n,m,s;
int dis[301100]={0};
vector<map<int,int>> nexts(301100);//邻接表
void bfs(int s){//算法主体
    for(int i=1;i<=n;i++)
        dis[i]=(1<<31)-1;//初始化
    dis[s]=0;
    list<pair<int,int>> l{{s,0}};//存储
    while(!l.empty()){
        auto front=l.front();
        for(auto i:nexts[front.first]){
            if(dis[i.first]==-1||front.second+i.second<dis[i.first])
                l.push_back({i.first,front.second+i.second}),
                    dis[i.first]=front.second+i.second;
        }
        l.pop_front();
    }
}
signed main(){
    ios::sync_with_stdio(false);
    cin>>n>>m>>s;
    for(int i=0;i<m;i++){
        int u,v,w;
        cin>>u>>v>>w;
        if(!nexts[u][v])nexts[u][v]=w;
        else nexts[u][v]=min(nexts[u][v],w);
    }
    bfs(s);
    for(int i=1;i<=n;i++)
        cout<<dis[i]<<" ";
}

算法的思想大概是广搜,先把起点放进队列,再取出队首,将所有与此点相邻的点路径更新。


by markding @ 2023-05-19 16:55:50

%%大佬想出spfa


上一页 |