这个SPFA有什么问题QAQ
  • 板块学术版
  • 楼主HaloisAWA
  • 当前回复2
  • 已保存回复3
  • 发布时间2024/11/25 12:07
  • 上次更新2024/11/25 16:53:54
查看原帖
这个SPFA有什么问题QAQ
1420058
HaloisAWA楼主2024/11/25 12:07
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct edge{
	int v;
	ll w;
	edge(int vv,ll ww) {
		v = vv;
		w = ww;
		return;
	}
};
struct node{
	int id;
	ll dis;
	node(int idd,ll diss) {
		id = idd;
		dis = diss;
		return;
	}
};
int n,m,s;
vector<edge> g[10010];
queue<node> q;
ll dis[10010];
bool vis[10010];
void SPFA() {
	memset(dis,0x7f,sizeof(dis));
	dis[s] = 0;
	vis[s] = true;
	q.push(node(s,0));
	while (!q.empty()) {
		node u = q.front();
		q.pop();
		vis[u.id] = false;//
		for (int i = 0;i < g[u.id].size();i ++) {
			int v = g[u.id][i].v;
			ll w = g[u.id][i].w;
			if (dis[v] > u.dis + w) {
				dis[v] = u.dis + w;
				if (!vis[v]) {
					vis[v] = true;
					q.push(node(v,dis[v]));
				}
			}
		}
	}
	return;
}
int main() {
	scanf("%d%d%d",&n,&m,&s);
	for (int i = 1;i <= m;i ++) {
		int ut,vt;
		ll wt;
		scanf("%d%d%lld",&ut,&vt,&wt);
		g[ut].push_back(edge(vt,wt));
	}
	SPFA();
	for (int i = 1;i <= n;i ++)
		if (dis[i] == 0x7f7f7f7f) printf("4294967295\n");
		else printf("%lld ",dis[i]);
	printf("\n");
	return 0;
}

2024/11/25 12:07
加载中...