POJ-2253-Frogger

给出n个点的坐标, 求1号点到2号点的最短路径

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
using namespace std;
const int maxn=210;
const int inf=1<<29;
int n,x[maxn],y[maxn];
double map[maxn][maxn],dist[maxn];
bool vis[maxn];
double Dis(int i,int j)
{
    return sqrt(1.0*(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
}
double Dijstra(int st)
{
    memset(vis,0,sizeof(vis));
    for(int i=1;i<=n;i++)
	dist[i]=map[st][i];
    dist[st]=0;
    vis[st]=1;
    for(int i=0;i<n-1;i++)
    {
	double mini=inf;
	int pos;
	for(int j=1;j<=n;j++)
	    if(!vis[j]&&dist[j]<mini)
	    {
		mini=dist[j];
		pos=j;
	    }
	vis[pos]=1;
	for(int j=1;j<=n;j++)
	    if(!vis[j]&&dist[j]>max(dist[pos],map[pos][j]))
		dist[j]=max(dist[pos],map[pos][j]);
    }
    return dist[2];
}
int main()
{
    int cas=1;
    while(scanf("%d",&n)&&n)
    {
	for(int i=1;i<=n;i++)
	{
	    map[i][i]=inf;
	    scanf("%d%d",&x[i],&y[i]);
	    for(int j=1;j<i;j++)
		map[i][j]=map[j][i]=Dis(i,j);
	}
	printf("Scenario #%d\n",cas++);
	printf("Frog Distance = %.3lf\n",Dijstra(1));
	printf("\n");
    }
    return 0;
}


你可能感兴趣的:(最短路径)