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...
原文地址:https://www.cnblogs.com/xxx0624/p/2602385.html