新七步诗
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(cin>>col>>row&&(row+col)){ 12 for(int i=0;i<row;++i){ 13 for(int j=0;j<col;++j){ 14 cin>>msp[i][j]; 15 if(msp[i][j]=='I'){si=i;sj=j;}//记录深搜的起点 16 } 17 } 18 dot=0,msp[si][sj]='.',dfs(si,sj); 19 cout<<dot<<endl; 20 } 21 return 0; 22 }