hdu1874
#include<stdio.h>
#include<string.h>
#define MAX 9999999
#define N 205
int map[N][N];
int vis[N];
int d[N];
int start,end,n,m;//n个村庄,m条路径
void init(){
memset(map,MAX,sizeof(map));
memset(vis,0,sizeof(vis));
memset(d,MAX,sizeof(d));
}
void dijkstra(int s,int e){
int i,k,j,min;
vis[s]=1;
for(i=0;i<n;i++)
d[i]=map[s][i];
d[s]=0;//注意
for(i=0;i<n;i++){
min=MAX;
for(j=0;j<n;j++){
if(vis[j]==0&&d[j]<min){
k=j;
min=d[j];
}
}
vis[k]=1;
for(j=0;j<n;j++){
if(vis[j]==0&&d[j]>(map[k][j]+d[k])&&map[k][j]<MAX)//
d[j]=map[k][j]+d[k];
}
}
return ;
}
int main(){
int tp1,tp2,dis;
while(scanf("%d%d",&n,&m)!=EOF){
init();
for(int i=0;i<m;i++){
scanf("%d%d%d",&tp1,&tp2,&dis);
if(map[tp1][tp2]>dis)
map[tp1][tp2]=map[tp2][tp1]=dis;
}
scanf("%d%d",&start,&end);
dijkstra(start,end);
if(d[end]<MAX)
printf("%d\n",d[end]);
else
printf("-1\n");
}
return 0;
}
简单的dijkstra!
oh yeah!虽然WA了好几次。。。
keep moving...

浙公网安备 33010602011771号