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;
}
上一篇: es6怎么将字符串转为数组
下一篇: JAVASCRIPT算编程不
推荐阅读