Dijkstra第二个样例不过QAQ,求助。。。
查看原帖
Dijkstra第二个样例不过QAQ,求助。。。
922943
rc_Taurus楼主2023/1/24 12:58

朴素Dijkstra,第二个样例不对,第一个对了,巨佬康康哪里错了(=@__@=)

#pragma GCC optmize(2)
#include<bits/stdc++.h>
using namespace std;
#define int long long
int inf; 
int n,m,edge[2005][2005],dis[2005];
bool vis[2005];
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	memset(edge,127,sizeof(edge));
	inf=edge[1][1];
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int u,v,w;
		cin>>u>>v>>w;
		edge[u][v]=w;
	}
	for(int i=1;i<=n;i++){
		dis[i]=edge[1][i];
	}
	vis[1]=true;
	dis[1]=0;
	for(int i=1;i<=n;i++){
		int temp=inf,t=-1;
		for(int j=1;j<=n;j++){
			if(!vis[j]&&temp>dis[j]){
				temp=dis[j];
				t=j;
			}
		}
		if(t==-1)break;
		vis[t]=true;
		for(int j=1;j<=n;j++){
			if(!vis[j]&&edge[t][j]<inf){
				if(dis[j]>dis[t]+edge[t][j])dis[j]=dis[t]+edge[t][j];
			}
		}
	}
	for(int i=1;i<=n;i++){
		if(dis[i]==inf)cout<<"-1 ";
		else cout<<dis[i]<<" ";
	}
	cout<<endl;
	return 0;
}

2023/1/24 12:58
加载中...