求大佬调错,只有七十分,可能是算法细节错误
查看原帖
求大佬调错,只有七十分,可能是算法细节错误
726777
wdAndLzl楼主2022/8/11 13:52

不断改正算法,但是一直爆局部错,错点好像数据挺多的,但是是结果错误,并没有爆。 看了总共接近五六个小时,都没有搞出来,求大佬帮忙指正,好人一生平安,谢谢哈哈哈。

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

struct Node{
    ll v,dis;
    //v为线段的目标点
};

const ll MAXV = 10005;
const ll MAXL= 1e6;
const ll INF = 2147483647;
ll n,m,s;
ll u,v,w;
vector<Node> ljb[MAXV];//邻接表
ll dis[MAXV];
bool vis[MAXL] = {false};
ll curr; 

int main(){    
    cin>>n>>m>>s;
    //初始化构建邻接表
    fill(dis,dis+MAXV,INF);
    for(ll i=0;i<m;i++){
        cin>>u>>v>>w; 
        Node node;
        node.v = v;
        node.dis = w;
        ljb[u].push_back(node); 
        if(u == s){
            dis[v] = w;//s为起点
        }
    }

    while(!vis[curr]){
        vis[curr] = true;
        for(int i=0;i<ljb[curr].size();i++){
            Node node;
            node.v = ljb[curr][i].v;
            node.dis = ljb[curr][i].dis;

            if(!vis[node.v] && node.dis+dis[curr] < dis[node.v]){
                dis[node.v] = node.dis+dis[curr];
            }
        }
        ll min = 2147483647;
        for(int j=1;j<=n;j++){           
            if(!vis[j] && dis[j]<min){
                min = dis[j];
                curr = j;
            }
        }
    }

    for(ll i=1;i<=n;i++){                      
        if(i == s){
            cout<<0<<" ";
        }
        else{
            cout<<dis[i]<<" ";
        }
    }
    return 0;
}
2022/8/11 13:52
加载中...