zoukankan      html  css  js  c++  java
  • bnuoj 33656 J. C.S.I.: P15(图形搜索题)

    http://www.bnuoj.com/bnuoj/problem_show.php?pid=33656

    【题解】:暴力搜索题

    【code】:

      1 #include <iostream>
      2 #include <stdio.h>
      3 #include <string.h>
      4 #include <algorithm>
      5 #include <queue>
      6 
      7 using namespace std;
      8 
      9 char map[100][100];
     10 int vis[100][100];
     11 int n,m;
     12 int B,F;
     13 int cx[]={0,-1,1,-1,1,-1,0,1};
     14 int cy[]={1,0,1,-1,-1,1,-1,0};
     15 
     16 int isAllDog(int l,int r)
     17 {
     18     int i=l-1,j=r-1;
     19     if(i>=0&&j>=0)
     20     {
     21         if(map[i][j]!='.')  return 0;
     22     }
     23     i=l-1,j=r;
     24     if(i>=0)
     25     {
     26         for(;j<r+4;j++)
     27         {
     28             if(map[i][j]!='.')  return 0;
     29         }
     30     }
     31     i=l-1,j=r+4;
     32     if(i>=0&&j<m)
     33     {
     34         if(map[i][j]!='.')  return 0;
     35     }
     36     i=l,j=r-1;
     37     if(j>=0)
     38     {
     39         if(map[i][j]!='.')  return 0;
     40     }
     41     i=l,j=r+4;
     42     if(j<m)
     43     {
     44         if(map[i][j]!='.')  return 0;
     45     }
     46     i=l+1,j=r-1;
     47     if(i<n&&j>=0)
     48     {
     49         if(map[i][j]!='.')  return 0;
     50     }
     51     i=l+1,j=r;
     52     if(i<n)
     53     {
     54         for(;j<r+4;j++)
     55         {
     56             if(map[i][j]!='.')  return 0;
     57         }
     58     }
     59     i=l+1,j=r+4;
     60     if(i<n&&j<m)
     61     {
     62         if(map[i][j]!='.')  return 0;
     63     }
     64     return 1;
     65 }
     66 
     67 void seach_birds()
     68 {
     69     int i,j;
     70     for(i=0;i<n;i++)
     71     {
     72         for(j=0;j<m-3;j++)
     73         {
     74             if(map[i][j]=='/'&&map[i][j+1]=='\'&&map[i][j+2]=='/'&&map[i][j+3]=='\')
     75             {
     76                 if(isAllDog(i,j))
     77                 {
     78                     B++;
     79                 }
     80                 j+=3;
     81             }
     82         }
     83     }
     84 }
     85 
     86 
     87 void seach_flower(int x,int y)
     88 {
     89     int i;
     90     vis[x][y] = 1;
     91     for(i=0;i<8;i++)
     92     {
     93         int dx = x+cx[i];
     94         int dy = y+cy[i];
     95         if(dx>=0&&dx<n&&dy>=0&&dy<m&&!vis[dx][dy]&&map[dx][dy]!='.'&&map[dx][dy]!='=')
     96         {
     97             vis[dx][dy]=1;
     98             seach_flower(dx,dy);
     99         }
    100     }
    101 }
    102 
    103 int main()
    104 {
    105     int t;
    106     scanf("%d",&t);
    107     while(t--)
    108     {
    109 
    110         scanf("%d%d",&n,&m);
    111         int i;
    112         for(i=0;i<n;i++)
    113         {
    114             scanf("%s",map[i]);
    115         }
    116         B=F=0;
    117         seach_birds();
    118         memset(vis,0,sizeof(vis));
    119         for(i=0;i<m;i++)
    120         {
    121             if(n-2>=0&&map[n-2][i]!='.'&&vis[n-2][i]==0)
    122             {
    123                 seach_flower(n-2,i);
    124                 F++;
    125             }
    126         }
    127         printf("Flowers: %d
    ",F);
    128         printf("Birds: %d
    ",B);
    129 
    130      //   cout<<B<<endl;
    131     }
    132     return 0;
    133 }
  • 相关阅读:
    Ext JS 6开发实例(三) :主界面设计
    Ext JS 6开发实例(二) :使用CMD创建应用程序
    文件夹或者文件比对工具 Beyond Compare
    LIS问题(DP解法)---poj1631(模板)
    hdoj Max Sum Plus Plus(DP)
    A* 算法详解
    hdoj1043 Eight(逆向BFS+打表+康拓展开)
    hdoj2612 Find a way (bfs)
    luoguP3366 [模板] 最小生成树
    luoguP1196(带权并查集)
  • 原文地址:https://www.cnblogs.com/crazyapple/p/3352428.html
Copyright © 2011-2022 走看看