spfa求助
查看原帖
spfa求助
365110
xuanyuan_Niubi楼主2020/10/3 19:23
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int M=200005;
const int INF=0x3f3f3f3f;
int dis[M],vis[M],head[M],n,m,c,tot;
struct edge{
	int v,w,nxt;
}ed[M];
void add(int u,int v,int w){
	ed[++tot].v=v;
	ed[tot].w=w;
	ed[tot].nxt=head[u];
	head[u]=tot;
}
queue<int>q;
void spfa(int s){
	dis[s]=0;
	vis[s]=1;
	q.push(s);
	while(!q.empty()){
		int u=q.front();
		q.pop();
		vis[u]=0;
		for(int i=head[u];i!=-1;i=ed[i].nxt){
			int v=ed[i].v;
			if(dis[v]<dis[u]+ed[i].w){
				dis[v]=dis[u]+ed[i].w;
				if(!vis[v]){
					vis[v]=1;
					q.push(v);
				}
			}
		}
	}
}
int main(){
	scanf("%d%d%d",&n,&m,&c);
	for(int i=1;i<=n;i++){
		head[i]=-1;
	}
	for(int i=1;i<=n;i++){
		int x;
		scanf("%d",&x);
		add(0,i,x);
	}
	for(int i=1;i<=c;i++){
		int u,v,w;
		scanf("%d%d%d",&u,&v,&w);
		add(u,v,w);
	}
	for(int i=0;i<=n;i++){
		vis[i]=0;
		dis[i]=-1000000;
	}
	spfa(0);
	for(int i=1;i<=n;i++){
		printf("%d\n",dis[i]);
	}
	return 0;
}

我就没明白为什么他卡在spfa里面出不来了, 调试的时候一直在这三句代码循环

		for(int i=head[u];i!=-1;i=ed[i].nxt){
			int v=ed[i].v;
			if(dis[v]<dis[u]+ed[i].w){
2020/10/3 19:23
加载中...