AC了
2024-06-29 21:16:06
发布于:浙江
52阅读
0回复
0点赞
#include <iostream>
#include <queue>
#define SIZE 2001
#define INF 2e+09
using namespace std;
struct edge
{
int to, dis;
};
vector<edge> graph[SIZE];
queue<int> q;
int dis[SIZE];
bool inqueue[SIZE];
void spfa(void) // SPFA变种
{
int u, v, w, i;
dis[1] = INF;
q.push(1);
while (!q.empty())
{
u = q.front();
q.pop();
inqueue[u] = false;
for (i = 0; i < graph[u].size(); ++i)
{
v = graph[u][i].to;
w = graph[u][i].dis;
if (min(dis[u], w) > dis[v]) // 这里的判断条件有些不同.
{
dis[v] = min(dis[u], w);
if (!inqueue[v])
{
q.push(v);
inqueue[v] = true;
}
}
}
}
return;
}
int main(void)
{
int n, u, v, w, i;
scanf("%d", &n);
while (scanf("%d%d%d", &u, &v, &w), ((u) || (v) || (w)))
{
graph[u].push_back({v, w}); // 建图
}
spfa();
for (i = 2; i <= n; ++i)
{
printf("%d\n", dis[i]);
}
return 0;
}
这里空空如也
有帮助,赞一个