zoukankan      html  css  js  c++  java
  • USACO2.42Overfencing(bfs)

    刚开始想写最短路 没写出来 TLE了在最后一组数据上 加了点优化过了 从两个出口出 像各点BFS 取最小中的最大值

    View Code
      1 /*
      2     ID: shangca2
      3     LANG: C++
      4     TASK: maze1
      5 */
      6 #include <iostream>
      7 #include<cstdio>
      8 #include<cstring>
      9 #include<algorithm>
     10 #include<stdlib.h>
     11 #include<queue>
     12 using namespace std;
     13 char str[300][210];
     14 int n,m,f[300][210],dis[4][2] = {0,1,0,-1,1,0,-1,0};
     15 struct node
     16 {
     17     int x,y,num;
     18 };
     19 int bfs(int x,int y,int xx,int yy,int o)
     20 {
     21     int i;
     22     queue<node>q;
     23     memset(f,0,sizeof(f));
     24     node t1;
     25     t1.x = x;
     26     t1.y = y;
     27     t1.num = 0;
     28     f[x][y] = 1;
     29     q.push(t1);
     30     while(!q.empty())
     31     {
     32         node t2 = q.front();
     33         if(t2.num>o)
     34         return o;
     35         q.pop();
     36         if(t2.x==xx&&t2.y == yy)
     37         {
     38             int kk = t2.num;
     39             return kk;
     40         }
     41         for(i = 0 ; i < 4 ; i++)
     42         {
     43             int tx = t2.x+dis[i][0];
     44             int ty = t2.y+dis[i][1];
     45             if(str[tx][ty]==' '&&!f[tx][ty]&&(tx>0&&tx<2*m&&ty>0&&ty<2*n))
     46             {
     47                 f[tx][ty] = 1;
     48                 tx = tx+dis[i][0];
     49                 ty = ty+dis[i][1];
     50                 f[tx][ty] = 1;
     51                 t1.num = t2.num+1;
     52                 t1.x = tx;
     53                 t1.y = ty;
     54                 q.push(t1);
     55             }
     56         }
     57     }
     58 }
     59 int main()
     60 {
     61     freopen("maze1.in","r",stdin);
     62     freopen("maze1.out","w",stdout);
     63     int i,j,k,g=0,e[10];
     64     scanf("%d%d",&n,&m);
     65     for(i = 0; i < 2*m+1 ; i++)
     66     {
     67         getchar();
     68         for(j = 0 ; j < 2*n+1 ; j++)
     69         {
     70             scanf("%c",&str[i][j]);
     71             if(i==0&&str[i][j]==' ')
     72             {
     73                 e[++g] = i+1;
     74                 e[++g] = j;
     75             }
     76             if(i==2*m&&str[i][j]==' ')
     77             {
     78                 e[++g] = i-1;
     79                 e[++g] = j;
     80             }
     81             if(j==0&&str[i][j]==' ')
     82             {
     83                 e[++g] = i;
     84                 e[++g] = j+1;
     85             }
     86             if(j==2*n&&str[i][j]==' ')
     87             {
     88                 e[++g] = i;
     89                 e[++g] = j-1;
     90             }
     91         }
     92     }
     93     int m1=0,m2=0;
     94     for(i = 0 ; i < 2*m+1 ; i++)
     95         for(j = 0 ; j < 2*n+1 ;j++)
     96         {
     97             if(i%2==1&&j%2==1)
     98             {
     99                 int k1 = bfs(e[1],e[2],i,j,100000000);
    100                 if(k1<m2)
    101                 continue ;
    102                 int k2 = bfs(e[3],e[4],i,j,k1);
    103                 m1 = min(k2,k1);
    104                 m2 = max(m1,m2);
    105             }
    106         }
    107     printf("%d\n",m2+1);
    108     return 0;
    109 }
  • 相关阅读:
    sockaddr与sockaddr_in,sockaddr_un结构体详细讲解
    busybox程序连接 ln怎么回事?怎样实现的
    有线网卡与无线网卡同时使用
    "$(@:_config=)"
    C#中Global文件
    Win7 IIS7 HTTP 错误 404.2 Not Found解决方法
    C#中的日期处理函数
    js字母大小写转换
    asp.net发布到IIS中出现错误:处理程序“PageHandlerFactoryIntegrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
    sql server在存储过程中使用游标和事务
  • 原文地址:https://www.cnblogs.com/shangyu/p/3027834.html
Copyright © 2011-2022 走看看