CE求助

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

chenlh0711 @ 2024-02-19 11:45:40

#include<bits/stdc++.h>
using namespace std;
const int maxn=5e6+10;
const int INF=(1<<31)-1;
struct node{
    int w,u;
    bool operator<(const node &x) const {
        return w>x.w;
    }
};
priority_queue<node> q;
struct Node{
    int v,w,nxt;
}e[maxn];
int head[maxn],d[maxn],vis[maxn];
int n,m,s,tot;
void dijk(int s){
    memset(d,0x3f,sizeof(d));
    d[s]=0;
    q.push((node){0,s});
    while(!q.empty())
        node x=q.top();
        q.pop();
        int t=x.u;
        if(vis[t]==1) continue;
        vis[t]=1;
        for(int i=head[t];i!=-1;i=e[i].nxt){
            int v=e[i].v;
            if(vis[v]==0&&d[v]>d[t]+e[i].w){
                d[v]+d[t]+e[i].w;
                q.push((node){d[v],v});
        }
    }
}
void add(int x,int y,int w){
    tot++;
    e[tot].v=y,e[tot].w=w,e[tot].nxt=head[x];
    head[x]=tot;
}
int main(){
    memset (head,-1,sizeof(head));
    cin>>n>>m>>s;
    for(int i=1;i<=m;i++){
        int x,y,w;
        cin>>x>>y>>w;
        add(x,y,w);
    }
    dijk(s);
    for(int i=1;i<=n;i++){
        if(d[i]!=0x3f3f3f3f)cout<<d[i]<<' ';
        else cout<<INF<<' ';
    }
    return 0;
}

第24行显示x未定义

第25行显示continue 不在循环中


by lzm0107 @ 2024-02-19 22:39:52

21行后面加个{,31行后面加个'}'


by qusia_MC @ 2024-02-28 20:13:17

#include<bits/stdc++.h>
using namespace std;
const int maxn=5e6+10;
const int INF=(1<<31)-1;
struct node{
    int w,u;
    bool operator<(const node &x) const {
        return w>x.w;
    }
};
priority_queue<node> q;
struct Node{
    int v,w,nxt;
}e[maxn];
int head[maxn],d[maxn],vis[maxn];
int n,m,s,tot;
void dijk(int s){
    memset(d,0x3f,sizeof(d));
    d[s]=0;
    q.push((node){0,s});
    while(!q.empty()){
    node x=q.top();
        q.pop();
        int t=x.u;
        if(vis[t]==1) continue;
        vis[t]=1;
        for(int i=head[t];i!=-1;i=e[i].nxt){
            int v=e[i].v;
            if(vis[v]==0&&d[v]>d[t]+e[i].w){
                d[v]+d[t]+e[i].w;
                q.push((node){d[v],v});
        }
    }
    }

}
void add(int x,int y,int w){
    tot++;
    e[tot].v=y,e[tot].w=w,e[tot].nxt=head[x];
    head[x]=tot;
}
int main(){
    memset (head,-1,sizeof(head));
    cin>>n>>m>>s;
    for(int i=1;i<=m;i++){
        int x,y,w;
        cin>>x>>y>>w;
        add(x,y,w);
    }
    dijk(s);
    for(int i=1;i<=n;i++){
        if(d[i]!=0x3f3f3f3f)cout<<d[i]<<' ';
        else cout<<INF<<' ';
    }
    return 0;
}

dijk函数里的while循环循环体部分用大括号括起来。不过这会WA我也不会改,你这程序太“天书”了


by qusia_MC @ 2024-02-28 20:13:33

@chenlh0711


|