题意:‘.’代表黑色瓷砖,‘#’代表红色瓷砖,‘@’代表一个人的起始位置,问这个人最多能踩到多少黑色瓷砖,注意注意!!!先输入列在输入行。
思路:也是典型的dfs,但是这里每访问一个黑色瓷砖的话,就标记为‘#’,代表不能再访问他了,因为在此访问的话,总数就不对了。(为此本弱调试了半小时才发现)
1 #include<cstdio> 2 #include<cmath> 3 #include<cstring> 4 const int qq=20+5; 5 int n,m,tot; 6 char map[qq][qq]; 7 int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}}; 8 void dfs(int x,int y) 9 { 10 ++tot; 11 for(int i=0;i<4;++i){ 12 int tx,ty; 13 tx=x+dir[i][0];ty=y+dir[i][1]; 14 if(tx<0||ty<0||tx>=n||ty>=m||map[tx][ty]=='#') 15 continue; 16 map[tx][ty]='#'; 17 dfs(tx,ty); 18 } 19 return; 20 } 21 int main() 22 { 23 while(scanf("%d%d",&m,&n)&&(n||m)) 24 { 25 int sx,sy; 26 getchar(); 27 for(int j,i=0;i<n;++i){ 28 for(j=0;j<m;++j){ 29 map[i][j]=getchar(); 30 if(map[i][j]=='@'){ 31 sx=i;sy=j;map[i][j]='#'; 32 } 33 } 34 getchar(); 35 } 36 tot=0; 37 dfs(sx,sy); 38 printf("%d ",tot); 39 } 40 }