求助!Dijkstra
  • 板块题目总版
  • 楼主YingHN
  • 当前回复9
  • 已保存回复9
  • 发布时间2022/10/25 15:00
  • 上次更新2023/10/27 05:58:29
查看原帖
求助!Dijkstra
494896
YingHN楼主2022/10/25 15:00

P4779

蒟蒻本人我,已经死磕2天,不知有何细枝末节的错误。小人不才,敬请各位神犇、大佬看看我代码,不胜感激:

#include<bits/stdc++.h>
using namespace std;
const int INF = 1e9 + 1, MAXN = 1e5 + 1;
int cnt, head[MAXN]; 
struct EDGE
{
	int next;
	int to;
	int wt; 
}edge[MAXN];
void addEdge(int u, int v, int wt)
{
	++cnt;
	edge[cnt].next = head[u];
	edge[cnt].to = v;
	edge[cnt].wt = wt;
	head[u] = cnt;
}
struct NODE
{
	int dis;
	int id;
	bool operator <(const NODE &x) const
	{
		return x.dis < dis;
	}
};
bool vis[MAXN], dis[MAXN];
int main()
{
	int n, m, s;
	cin>>n>>m>>s;
	for(int i = 1; i <= n; ++i)dis[i] = INF;
	for(int i = 0; i < m; ++i) 
	{
		int u, v, wt;
		cin>>u>>v>>wt;
		addEdge(u, v, wt);
	}
	priority_queue<NODE> que;
	que.push(NODE{0, s});
	dis[s] = 0;
	while(!que.empty())
	{
		NODE u = que.top();
		que.pop();
		if(vis[u.id])continue;
		vis[u.id] = true;
		int size = que.size();
		for(int i = head[u.id]; i; i = edge[i].next)
		{
			
			cout<<"#"<<i<<" ";
			if(!vis[i])continue;
			if(dis[edge[i].to] > dis[u.id] + edge[i].wt)
			{
				cout<<"使用"<<i<<"对"<<edge[i].to<<"进行松弛\n"; 
				dis[edge[i].to] = dis[u.id] + edge[i].wt;
				if(!vis[edge[i].to])
				{
					que.push(NODE{dis[edge[i].to], edge[i].to});
				}
			}
		}
	}
	for(int i = 1; i <= n; ++i)
	{
		
		cout<<dis[i]<<" ";
	}
}

2022/10/25 15:00
加载中...