新七步诗
Time Limit: 2000/1000ms (Java/Others)
Problem Description:
突然的一天,小锴做了一个梦,梦见自己来到了三国,而自己也成了梦寐以求的帅哥——曹植。不幸的是,小锴得罪了曹丕,而这个曹丕竟然长得跟小光会长一模一样,这......。这剧情有点狗血。于是,小光会长把小锴关进了一个矩形房间,这个房间被分成一个个边长为1的方块。这个房间除了小锴,还有凶猛的士兵,小锴只能在士兵把守的范围内活动。
Output:
对于每组测试数据,输出小锴可以行走的房间的面积。
Sample Input:
6 9
....X.
.....X
......
......
......
......
......
XI...X
.X..X.
7 7
..X.X..
..X.X..
XXX.XXX
...I...
XXX.XXX
..X.X..
..X.X..
0 0
Sample Output:
45
13
解题思路:暴力深搜,题意跟这题一样的,链接:ACM_魔仙岛探险(深搜)
AC代码:
1 #include<bits/stdc++.h>
2 using namespace std;
3 int col,row,si,sj,dot,dir[4][2]={{-1,0},{0,1},{1,0},{0,-1}};char msp[25][25];
4 void dfs(int x,int y){
5 if(x<0||y<0||x>=row||y>=col||msp[x][y]=='X')return;
6 msp[x][y]='X';dot++;
7 for(int i=0;i<4;++i)
8 dfs(x+dir[i][0],y+dir[i][1]);
9 }
10 int main(){
11 while(~scanf("%d %d",&col,&row)&&(row+col)){
12 for(int i=0;i<row;++i){
13 getchar();//吃掉回车符对字符读取的影响
14 for(int j=0;j<col;++j){
15 scanf("%c",&msp[i][j]);
16 if(msp[i][j]=='I'){si=i;sj=j;}//记录深搜的起点
17 }
18 }
19 dot=0,msp[si][sj]='.',dfs(si,sj);
20 printf("%d
",dot);
21 }
22 return 0;
23 }