社区讨论

求助,刚学图论,Dij 7WA 3MLE

P3371【模板】单源最短路径(弱化版)参与者 5已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@locemxxo
此快照首次捕获于
2023/10/30 12:33
2 年前
此快照最后确认于
2023/11/05 00:13
2 年前
查看原帖
还没学vector来搞最短路,用的邻接矩阵,不知道为啥WA o(TヘTo)
CPP
#include<iostream>
#include<vector>
using namespace std;
typedef long long ll;
ll val[1001][1001];
ll dis[1001],vis[1001];
#define inf ll(1<<30)*2-1 // 2147483647
ll n,m,s;
void init(){
    for(ll i=1;i<=n;i++){for(ll j=1;j<=n;j++){if(i==j)val[i][j]=0;else val[i][j]=inf;}}
}
void input(){
    while(m--){
        ll u,v,w;
        cin>>u>>v>>w;
        val[u][v]=w;
    }
}
void dijkstra(){
    vis[s]=1;
    for(ll i=1;i<=n;i++)dis[i]=val[s][i];
    ll k;
    for(ll i=1;i<n;i++){
        ll nmin=inf;
        for(ll j=1;j<=n;j++){
            if(!vis[j] and nmin>dis[j]){nmin=dis[j];k=j;}
        }
        vis[k]=1;
        for(ll j=1;j<=n;j++){
            if(!vis[j] and dis[j]>dis[k]+val[k][j])dis[j]=dis[k]+val[k][j];
        }
    }
}
int main(){
    cin>>n>>m;
    cin>>s;
    init();
    input();
    dijkstra();
    for(ll i=1;i<=n;i++)cout<<dis[i]<<" ";
    return 0;
}

回复

6 条回复,欢迎继续交流。

正在加载回复...