欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

hdu2544dij

程序员文章站 2022-03-22 19:09:44
...

添加链接描述

#include<bits/stdc++.h>
#define inf 99999999
using namespace std;
int vis[105],t[105],mt[105][105];
int m,n;
void dij(){
	for(int i=1;i<=n;i++){
		t[i]=mt[1][i];
	}
	for(int i=1;i<=n-1;i++){//找n-1轮 
		int mins=inf;
		int k;
		for(int j=1;j<=n;j++){
			if(vis[j]==0&&t[j]<mins){
				mins=t[j];
				k=j;
			}
		}
		vis[k]=1;
		for(int j=1;j<=n;j++){
			if(vis[j]==0&&t[k]+mt[k][j]<t[j]){
				t[j]=t[k]+mt[k][j];
			}
		}
	}
	printf("%d\n",t[n]); 
}
int main(){
	while(scanf("%d%d",&n,&m)!=EOF){
		if(n==0&&m==0) break;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				if(i==j) mt[i][j]=0;
				else mt[i][j]=inf;
			}
		}
		memset(vis,0,sizeof(vis));
		int a,b,c;
		for(int i=1;i<=m;i++){
			scanf("%d%d%d",&a,&b,&c);
			if(c<mt[a][b]) mt[a][b]=mt[b][a]=c;
		}
		dij();
	}
	return 0;
}
相关标签: 进阶课程

推荐阅读