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