标签:
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 8790 | Accepted: 5260 |
Description
XX Grid 1 .XXX Grid 2
XX .XXX
.XXX
...X
..X.
X...
XXX
XXX Central X and adjacent X‘s
XXX
Impossible Possible
XXXX XXXX XXXX XXXX
X..X XXXX X... X...
XX.X XXXX XX.X XX.X
XXXX XXXX XXXX XX.X
..... ..... ..... .....
..X.. ..X.. ..X.. ..X..
.X.X. .XXX. .X... .....
..X.. ..X.. ..X.. ..X..
..... ..... ..... .....
Input
Output
Sample Input
2 2 2 2
XX
XX
6 4 2 3
.XXX
.XXX
.XXX
...X
..X.
X...
5 6 1 3
.XXXX.
X....X
..XX.X
.X...X
..XXX.
7 7 2 6
XXXXXXX
XX...XX
X..X..X
X..X...
X..X..X
X.....X
XXXXXXX
7 7 4 4
XXXXXXX
XX...XX
X..X..X
X..X...
X..X..X
X.....X
XXXXXXX
0 0 0 0
Sample Output
8
18
40
48
8
Source
裸BFS或者DFS都可以……算目标点所在的X块儿的周长,其实就是统计周围的点的数量(由于实际上是算周长,点可以重复统计)。
1 /**/ 2 #include<iostream> 3 #include<cstdio> 4 #include<cmath> 5 #include<cstring> 6 #include<algorithm> 7 using namespace std; 8 int mx[9]={0,1,0,-1,0,1,1,-1,-1}, 9 my[9]={0,0,1,0,-1,1,-1,1,-1}; 10 char mp[30][30]; 11 int n,m,sx,sy; 12 int DFS(int x,int y){ 13 if(mp[x][y]!=‘X‘)return 0; 14 mp[x][y]=‘1‘; 15 int ans=0,i; 16 for(i=1;i<=4;i++) 17 if(mp[x+mx[i]][y+my[i]]==‘.‘)ans++; 18 for(i=1;i<=8;i++){ 19 ans+=DFS(x+mx[i],y+my[i]); 20 } 21 return ans; 22 } 23 int main(){ 24 while(scanf("%d%d%d%d",&n,&m,&sx,&sy) && n && m){ 25 int i,j; 26 char c[50]; 27 memset(mp,‘.‘,sizeof(mp)); 28 for(i=1;i<=n;i++){ 29 scanf("%s",c); 30 for(j=1;j<=m;j++){ 31 mp[i][j]=c[j-1]; 32 } 33 } 34 printf("%d\n",DFS(sx,sy)); 35 } 36 return 0; 37 }
标签:
原文地址:http://www.cnblogs.com/SilverNebula/p/5744657.html