zoukankan      html  css  js  c++  java
  • bzoj 1295: [SCOI2009]最长距离

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<cstring>
     5 using namespace std;
     6 int n,m,T;
     7 double ans=0;
     8 bool mp[31][31],inq[31][31],vis[31][31];
     9 int dis[31][31];
    10 int dx[4]={1,-1,0,0};
    11 int dy[4]={0,0,-1,1};
    12 struct data{
    13 int x,y;
    14 }q[100000];
    15 void getans(int x,int y)
    16 {
    17     for(int i=x;i<=n;i++)
    18        for(int j=1;j<=m;j++)
    19           if(dis[i][j]<=T&&(y-j)*(y-j)+(x-i)*(x-i)>ans)
    20              ans=(y-j)*(y-j)+(x-i)*(x-i);
    21 }
    22 void search(int xx,int yy)
    23 {
    24     int nowx,nowy,i,t=1,w=1,nx,ny;
    25     q[1].x=xx;q[1].y=yy;
    26     memset(inq,0,sizeof(inq));
    27     memset(dis,127,sizeof(dis));
    28     inq[xx][yy]=1;dis[xx][yy]=mp[xx][yy];
    29     while(t<=w)
    30     {
    31         nowx=q[t].x;nowy=q[t].y;
    32         t++;
    33         for(i=0;i<4;i++)
    34         {
    35             nx=nowx+dx[i];ny=nowy+dy[i];
    36             if(nx>n||nx<xx||ny>m||ny<1)continue;
    37             if(dis[nowx][nowy]+mp[nx][ny]<dis[nx][ny])
    38             {
    39                  dis[nx][ny]=dis[nowx][nowy]+mp[nx][ny];
    40                  if(!inq[nx][ny])   
    41                  {
    42                     q[++w].x=nx;q[w].y=ny;inq[nx][ny]=1;
    43                  }      
    44             }
    45         }
    46         inq[nowx][nowy]=0;
    47     }
    48     getans(xx,yy);
    49 }
    50 int main()
    51 {
    52     scanf("%d%d%d",&n,&m,&T);
    53     char str[40];
    54     for(int i=1;i<=n;i++)
    55     {
    56         scanf("%s",str);
    57         for(int j=0;j<m;j++)
    58         mp[i][j+1]=str[j]-'0';
    59     }
    60     for(int i=1;i<=n;i++)
    61        for(int j=1;j<=m;j++)
    62           {search(i,j);}
    63     printf("%.6lf",sqrt(ans));
    64     return 0;
    65 }

    以每一个点为中心进行宽搜,存到每个点移去的最小障碍数,然后枚举更新最优值。

  • 相关阅读:
    python 查看所有的关键字
    使用yum命令报错File "/usr/bin/yum", line 30 except KeyboardInterrupt, e: SyntaxError: invalid syntax问题
    安装Python3.6.2报错:zipimport.ZipImportError: can't decompress data; zlib not available
    在CentOS-7.0中安装Python3.6.2
    批处理基础
    linux创建线程之pthread_create
    嵌入式 printf函数
    滤波算法
    单片机启动文件
    SUID、SGID详解
  • 原文地址:https://www.cnblogs.com/xydddd/p/5248874.html
Copyright © 2011-2022 走看看