poj 2253 最短路

来源:互联网 发布:影子去除算法 编辑:程序博客网 时间:2024/06/01 10:22

2015/1/27


最短路转下思路 或者  二分

POJ去提交,别忘记浮点数G++用 %f..


#include<map>#include<queue>#include<stack>#include<cmath>#include<vector>#include<climits>#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<iomanip>using namespace std;typedef long long ll;  #define mod 10007#define lson pos<<1,l,mid#define sc(n) scanf("%d",&n)#define rson pos<<1|1,mid+1,r#define pr(n) printf("%d\n",n)#define met(n,m) memset(n, m, sizeof(n))#define F(x,y,i) for(int i = x;i > y; i--)#define f(x,y,i) for(int i = x;i < y; i++)#define ff(x,y,i) for(int i = x;i <= y; i++)#define FF(x,y,i) for(int i = x;i >= y; i--) const int N=100500;const int inf = INT_MAX;int Max(int a,int b){return a>b?a:b;}int Min(int a,int b){return  a<b?a:b;}struct node{int x;int y;}s[1005];int dis[1005];int vis[1005];int leave(int a,int b){return (s[a].x - s[b].x)*(s[a].x - s[b].x) + (s[a].y - s[b].y)*(s[a].y - s[b].y);}int main()  {      int n, m, tot, x, k;    tot = 1;    while(~scanf("%d",&n) && n)    {    int temp;    met(vis,0);    f(0,n,i)    {    scanf("%d%d",&s[i].x,&s[i].y);    }    f(0,n,i)    {    dis[i] = leave(0,i);    }    vis[0] = 1;        f(0,n-1,i)    {    temp = inf;    f(0,n,j)    {    if(!vis[j] && dis[j] < temp)    {    temp = dis[j];           k = j;    }    }    vis[k] = 1;        f(0,n,j)    {    if(!vis[j])    {    if(dis[j] > Max(dis[k],leave(k,j)))    {    dis[j] = Max(dis[k],leave(k,j));    }    }    }         }    cout<<"Scenario #"<<tot++<<endl;      printf("Frog Distance = %.3lf\n\n",sqrt(1.0*dis[1]));         }    return 0;  }  


0 0
原创粉丝点击