求助
查看原帖
求助
446894
cmathFPV楼主2021/7/15 11:20
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
#define MAX 105
#define MAX_DIS 9999999999
int arrpath[MAX][MAX];
int n,m,s;
int dist[MAX];
bool visit[MAX];
void init(){
	for(int i=0;i<MAX;i++){
		for(int j=0;j<MAX;j++){
			arrpath[i][j]=MAX_DIS;
		}
		arrpath[i][i]=0;
	}
	memset(visit,false,sizeof(visit));
	for(int i=2;i<=n;i++){
		dist[i]=MAX_DIS;
	}
	dist[1]=0;
}
void create(){
	int v1,v2,weight;
	for(int i=1;i<=m;i++){
		cin>>v1>>v2>>weight;
		if(arrpath[v1][v2]>weight){
			arrpath[v1][v2]=weight;
			arrpath[v2][v1]=weight;
		}
	}
}
void dijstra(){
	while(1){
		int v=-1;
		for(int i=1;i<=n;i++){
			if(!visit[i]&&(v==-1||dist[i]<dist[v])){
				v=i;
			}
		}
		if(v==-1)break;
	visit[v]=true;
	for(int i=1;i<=n;i++){
		if(arrpath[v][i]){
			dist[i]=min(dist[i],dist[v]+arrpath[v][i]);
		}
	}
	}
}
int main(){
    cin>>n>>m>>s;
	if(!n&&!m){
		return 0;
	}else{
		init();
		create();
		dijstra();
}
for(int i=1;i<=n;i++){
cout<<dist[i]<<" ";
}
   return 0; 
} 
2021/7/15 11:20
加载中...