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了好几次。。。

你可能感兴趣的:(HDU)