求助,是不是dijkstra函数出问题了
查看原帖
求助,是不是dijkstra函数出问题了
302584
DottedCalculator楼主2020/9/3 21:25
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int u[10000],v[10000],w[10000],n,m,s,r[10000],stat[10000]={0};
long long maxn=0;
int check(){
	for(int i=1;i<=n;i++){
		if(stat[i]==0)    return 0;
	}
	return 1;
}
int dijkstra(int cur,int dist){
	if(check())    return 0;
	for(int i=0;i<m;i++){
		if(cur==u[i]){
			if(r[v[i]]>w[i])    r[v[i]]=w[i];
		}
		if(cur==v[i]){
			if(r[u[i]]>w[i])   r[u[i]]=w[i];
		}
	}
	int t1,t2=999999999;
	for(int i=1;i<=n;i++){
		if(r[i]<t2&&(u[i]==cur||v[i]==cur)){
			t2=r[i];t1=i;
		}
	}
	stat[t1]=1;
	return dijkstra(t1,dist+w[t1]);
} 
int main(){
	cin>>n>>m>>s;
	for(int i=0;i<m;i++){
		cin>>u[i]>>v[i]>>w[i];
		if(w[i]>maxn)    maxn=w[i];
	}
	maxn*=n;
	for(int i=1;i<=n;i++)     r[i]=999999999;
	int t;
	t=dijkstra(s,0);
	for(int i=1;i<=n;i++){
		if(r[i]==999999999)     cout<<pow(2,31)-1<<" ";
		else    cout<<r[i]<<" ";
	}
	getchar();getchar();
	return 0;
} 
2020/9/3 21:25
加载中...