找不到错
查看原帖
找不到错
1067789
Director_Ni楼主2023/10/16 20:26

可能是死循环部分写错了,求大佬看看

#include<bits/stdc++.h>
using namespace std;
const int M=50001;int dis[M],pre[M],n,m;
struct EDGE {int to,nex,v;}e[M];int head[M],cnt;
void ad(int u,int v,int t){
    e[cnt].to=v;
    e[cnt].nex=u;e[cnt].v=t;
    head[u]=cnt++;
}
int main(){
    int u,v,t,n=0,m=0;
    freopen("long.in","r",stdin);
    freopen("long.out","w",stdout);
    cin>>n>>m;
    for(int i=2;i<=n;++i){
        dis[i]=-9999;
    }
    dis[1]=0;
    for(int i=1;i<=m;++i){
        e[i].nex=-1;head[i]=-1;
    }//lianshixiangqianxing

    for(int i=1;i<=m;++i){
        scanf("%d",&u);scanf("%d",&v);scanf("%d",&t);
        ad(u,v,t);
    }
    queue<int>b;
    while(1){
        bool ok=false;
        //b.clear;
        b.push(1);
        while(!b.empty()){
        for(int i=head[b.front()];i>0;i=e[i].nex){
            b.pop();
            int p=e[i].to;
            if(dis[p]<dis[i]+e[i].v){
                dis[p]=dis[i]+e[i].v;ok=1;
            }
            b.push(p);
        }
        }
        if(!ok){
                if(dis[n]==-9999){
                    cout<<-1;return 0;
                }
            cout<<dis[n];return 0;
        }
    }
}
2023/10/16 20:26
加载中...