您的位置:首页 > 其它

poj 2387 Til the Cows Come Home

2010-10-17 18:01 441 查看
题意:求两点之间的最短距离,而且还是赤裸裸的,用的算法dijkstra。

代码:

#include <stdio.h>
#define MAX 2000000
int map[1020][1020];
int shortl[1020][1020];
int dijkstra(int map[][1020],int n,int begin,int end);
int main()
{
int i , j , k;
int t,n;
int dist;
scanf("%d%d",&t,&n);
for(i = 1; i <= n; i++)
for(j = 1;j <= n;j++)
map[i][j] = MAX;

for(k = 0 ; k< t; k++)
{
scanf("%d%d%d",&i,&j,&dist);
if( dist < map[i][j])
{
map[i][j] = dist;
map[j][i] = map[i][j];
}
}
printf("%d/n",dijkstra(map,n,1,n));
return 0;
}
int dijkstra(int map[][1020],int n,int begin,int end)
{
int i,k;
int min,min_;
int bools[1020],dist[1020];
for(i =1; i <= n; i++)
bools[i] = 0;
for(i = 1 ;i <= n; i++)
dist[i] = map[begin][i];
bools[begin] = 1;
for(k = 2;k <= n; k++)
{
min=MAX;
for(i = 1; i <= n;i++)
{
if(dist[i]<min && bools[i]==0)
{
min = dist[i];
min_ = i;
}
}
bools[min_] = 1;
if(min_ == end)
return min;

for(i = 1 ; i <= n; i++) //更新最短距离
{
if(bools[i]==0 && map[min_][i] < MAX)
if(map[min_][i]+dist[min_] < dist[i])
dist[i] = map[min_][i] + dist[min_];
}
}
return min;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: