ACM_新七步诗(深搜)

新七步诗

Time Limit: 2000/1000ms (Java/Others)

Problem Description:

突然的一天,小锴做了一个梦,梦见自己来到了三国,而自己也成了梦寐以求的帅哥——曹植。不幸的是,小锴得罪了曹丕,而这个曹丕竟然长得跟小光会长一模一样,这......。这剧情有点狗血。于是,小光会长把小锴关进了一个矩形房间,这个房间被分成一个个边长为1的方块。这个房间除了小锴,还有凶猛的士兵,小锴只能在士兵把守的范围内活动。

Input:

多组测试数据。对于每组测试数据,首行是W和H(0<=W,H<=20),分别代表方块的列数和行数。接下来是房间的布局:
“.”:空的方块,即小锴可行走;
“X”:有士兵的方块,即小锴不能行走,也不能越过士兵;
“I”:小锴的初始位置。
当输入为两个0时,不做处理,结束测试。

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 }

原文地址:https://www.cnblogs.com/acgoto/p/9276515.html