SPFA模板题求助
  • 板块学术版
  • 楼主南瓜桐
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/2/20 19:39
  • 上次更新2023/10/28 08:02:10
查看原帖
SPFA模板题求助
439327
南瓜桐楼主2022/2/20 19:39

题目传送门

我滴代码QAQ:

#include<iostream>
#include<cstdio>
#include<queue>
#include<vector> 
using namespace std;
vector <bool>vis;
vector <int>head,to,nxt,dis,d,cnt;
const int inf = 1e9 + 1;
int n,m,s;
queue <int>q;
void my_add(int u,int v,int w){
	dis.push_back(w);
	to.push_back(v);
	nxt.push_back(head[u]);
	head[u] = nxt.size() - 1;
	return;
}
bool spfa(){
	d[s] = 0;
	vis[s] = 1;
	q.push(s);
	while(q.size()){
		int x = q.front();
		q.pop();
		vis[x] = 0;
		for(int i = head[x]; i != -1; i = nxt[i]){
			int y = to[i];
			int z = dis[i];
			if(d[y] > d[x] + z){
				d[y] = d[x] + z;
				cnt[y] = cnt[x] + 1;
				if(cnt[y] >= n)return false;
				if(vis[y] == false){
					vis[y] = true;
					q.push(y);
				}
			}
		}
	}
	return true;
}
int main(){
	cin>>n>>m>>s;
	head.resize(n+1,-1);
	vis.resize(n+1,-1);
	cnt.resize(n+1,0);
	d.resize(n+1,inf); 
	for(int i = 1; i <= m; ++i){
		int u,v,w;
		cin>>u>>v>>w;
		my_add(u,v,w);
	}
	
	if(spfa() == false){
		cout<<-1;
		return 0;
	}else{
		for(int i = 1; i <= n; ++i){
			if(d[i] == inf){
				cout<<2147483647<<' ';
			}else{
				cout<<d[i]<<' ';
			}
		}
	}
	return 0;
}

Orz

2022/2/20 19:39
加载中...