求助
查看原帖
求助
492281
longerfu楼主2021/10/11 00:37

样例爆了一个点

//dijkstra
#include <algorithm>
#include <iostream>
using namespace std;
const int maxv =1000;
const int INF = 0x7fffffff;

int n,m,s;
int g[maxv][maxv]; 
int d[maxv];
bool vis[maxv]={false};

inline void Dijkstra(int s)
{
	fill(d,d+maxv,INF);
	d[s] = 0;
	for(int i=0;i<n;i++)
	{
		int u = -1,Min = INF;
		for(int j=0;j<n;j++)
		{
			if(vis[j]==false&&d[j]<Min)
			{
				u = j;
				Min = d[j];
			}
		}
		if(u==-1) return;
		vis[u] = true;
		for(int v=0;v<n;v++)
		{
			if(vis[v]==false&&g[u][v]!=INF&&d[u]+g[u][v]<d[v])
			{
				d[v] = d[u]+g[u][v];
			}
		}
	}
}
int main()
{
	int u,v,w;
	cin>>n>>m>>s;
	fill(g[0],g[0]+maxv*maxv,INF); 
	for(int i=0;i<m;i++)
	{
		cin>>u>>v>>w;
		g[u][v] = w;
	}
	Dijkstra(s);
	for(int i=0;i<n;i++)
	{
		if(i>0) cout<<" ";
		cout<<d[i];
	}
	return 0;
}
2021/10/11 00:37
加载中...