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 }