求助,全部RE
查看原帖
求助,全部RE
248112
山橘月楼主2021/8/20 18:52
#include<bits/stdc++.h>
using namespace std;
const int N=100;
const int INF=1e7;
int mp[N][N],dist[N],p[N],n,m;
bool flag[N];
void dijkstra(int u)
{
	for(int i=1;i<=n;i++)
	{
		dist[i]=mp[u][i];
		flag[i]=false;
		if(dist[i]==INF) p[i]=-1;
		else p[i]=u;
	}
	dist[u]=0;
	flag[u]=true;
	for(int i=1;i<=n;i++)
	{
		int temp=INF,t=u;
		for(int j=1;j<=n;j++)
		{
			t=j;
			temp=dist[j];
		}
		if(t==u) return;
		flag[t]=true;
		for(int j=1;j<=n;j++)
		{
			if(!flag&&mp[t][j]<INF)
			{
				if(dist[j]>(dist[t]+mp[t][j]))
				{
					dist[j]=dist[t]+mp[t][j];
					p[j]=t;
				 } 
			}
		}
	}
}
int main()
{
	int u,v,w,st;
	cin>>n>>m>>st;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++) mp[i][j]=INF;
	while(m--)
	{
		cin>>u>>v>>w;
		mp[u][v]=min(mp[u][v],w);
	}		
	dijkstra(st);
	for(int i=1;i<=n;i++) cout<<dist[i]<<' ';
	return 0;
}

数组开的大一点会编译错误

蒟蒻快哭了qaq

2021/8/20 18:52
加载中...