请问大佬
查看原帖
请问大佬
630692
111222333aaa楼主2023/2/9 12:14

为什么dis初始化为0x3f,而特判2147483647的时候是判断0x3f3f3f3f?

(这是上课的代码,就是不理解这一点)

#include<bits/stdc++.h>
using namespace std;
int n,m,s,x,y,z;
struct graph{
    priority_queue<pair<int,int> >pq;
    int vis[500005],dis[500005];
    struct node{
        int to;
        int value;
        int nxt;
    }edges[500005];
    int head[500005];
    int cnt=0;
    void push(int u,int v,int w){
        cnt++;
        edges[cnt].to=v;
        edges[cnt].value=w;
        edges[cnt].nxt=head[u];
        head[u]=cnt;
    }
    void dijkstra(int s){
        memset(dis,0x3f,sizeof(dis));//这里
        memset(vis,0,sizeof(vis));
        dis[s]=0;
        pq.push(make_pair(0,s));
        while(pq.size()){
            int now=pq.top().second;
            pq.pop();
            if(vis[now])continue;
            vis[now]=1;
            for(int i=head[now];i;i=edges[i].nxt){
                if(dis[now]+edges[i].value<dis[edges[i].to]){
                    dis[edges[i].to]=dis[now]+edges[i].value;
                    pq.push(make_pair(-dis[edges[i].to],edges[i].to));
                }
            }
        }
    }
}G;
int main(){
    cin>>n>>m>>s;
    for(int i=1;i<=m;i++){
        cin>>x>>y>>z;
        G.push(x,y,z);
    }
    G.dijkstra(s);
    for(int i=1;i<=n;i++){
        if(G.dis[i]==0x3f3f3f3f)cout<<2147483647<<' ';//这里
        else cout<<G.dis[i]<<' ';
    }
    return 0;
}
2023/2/9 12:14
加载中...