Frogger 最短路变种
[cpp]/*注意细节。memset里面的0x7f和常数赋值的0x7f差别很大。常数赋值的数值很小。而memset内部是按照字节进行赋值。是一个很大的值。
这一道题是一道最短路的变种。实际上是求所有路径中最大边的最小值。
起点是1,终点为2.*/
#include <stdio.h>
#include <cstring>
#include <cmath>
#include <iostream>
using namespace std;
double dist[201];
double map[201][201];
bool vis[201];
struct point
{
double x,y;
};
point p[201];
double dis(point a,point b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
int main()
{
int n;
int ca=1;
while(scanf("%d",&n)==1&&n)
{
for(int i=1;i<=n;i++)
scanf("%lf%lf",&p[i].x,&p[i].y);
memset(vis,false,sizeof(vis));
memset(dist,0x7f,sizeof(dist));
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
map[i][j]=map[j][i]=dis(p[i],p[j]);
dist[1]=0;
for(int i=1;i<=n;i++)
{ www.zzzyk.com
double minn=0x7f7f7f7f;
int k;
for(int j=1;j<=n;j++)
{
if(!vis[j]&&dist[j]<minn)
{
k=j;
minn=dist[j];
}
}
vis[k]=true;
for(int j=1;j<=n;j++)
dist[j]=min(dist[j],max(dist[k],map[k][j]));
}
printf("Scenario #%d\n",ca++);
printf("Frog Distance = %.3lf\n",dist[2]);
printf("\n");
}
return 0;
}
补充:软件开发 , C++ ,