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\n",F);
128         printf("Birds: %d\n",B);
129 
130      //   cout<<B<<endl;
131     }
132     return 0;
133 }

 

posted @ 2013-10-05 15:06  crazy_apple  阅读(237)  评论(0编辑  收藏  举报