求助
查看原帖
求助
164836
juruojjl_楼主2020/9/20 20:10

rt

我知道下面的代码肯定过不了(数组太小了)

但是有大佬能告诉我为什么过不了样例吗QwQ

#include<bits/stdc++.h>
#define infinity 10000000
using namespace std;
int e[114][114];
int n,m,s;
void dijkstra(int x)
{
	int path[114514],mark[114514],min=114514,dis[114514],k;
	for(int i=1;i<=n;i++)
	{
		mark[i]=0;
		dis[i]=e[x][i];
		path[i]=x;
	}
	mark[x]=1;
	do
	{
		min=infinity;
		k=0;
		for(int i=1;i<=n;i++) 
			if(mark[i]==0&&dis[i]<min) min=dis[i],k=i;
			if(k)
			{
				mark[k]=1;
				for(int i=1;i<=n;i++) if(e[k][i]<infinity&&dis[i]>min+e[k][i]) dis[i]=min+e[k][i],path[i]=k;
			}
	}while(k);
	for(int i=1;i<=n;i++)
		if(i!=x&&dis[i]<infinity)
		{
			k=i;
			do
			{
				//cout<<k<<"<--";
				k=path[k];
			}while(k!=x);
			//cout<<x<<endl;
			cout<<dis[i]<<" "; 
		}
}
int main()
{
	cin>>n>>m>>s;
	for(int i=1;i<=m;i++)
	{
		int u,v,w;
		cin>>u>>v>>w;
		e[u][v]=w;
	}
	dijkstra(s);
	return 0;
}
2020/9/20 20:10
加载中...