一开始理解错题意了,以为是走过的砖不能再重复走,最多能走多少个黑砖,结果写的递归陷入死循环。。。
后来才明白原来可以重复走,问可以到达的磁砖数。
#include <iostream> #include <string.h> #include <stdio.h> #include <math.h> #include <algorithm> using namespace std; int w,h,num,ans; int f[22][22];//存储地图的信息,为0代表是黑砖,为1代表红砖,2代表已走过该砖 void search(int row,int col){ if(row<1||row>h||col<1||col>w){ return; } if(f[row][col]==1||f[row][col]==2) return; num++; f[row][col]=2; search(row,col-1); search(row,col+1); search(row-1,col); search(row+1,col); } int main() { int px,py; char str[22]; while(scanf("%d%d",&w,&h)!=EOF){ if(w==0 && h==0) break; memset(f,0,sizeof(f)); num=0; ans=0; for(int i=1;i<=h;i++){ scanf("%s",str); //一开始j从1开始了,囧。。。 for(int j=0;j<w;j++){ if(str[j]=='#') f[i][j+1]=1; else if(str[j]=='@'){ //f[i][j]=2; px=i; py=j+1; } } } search(px,py); printf("%d ",num); } return 0; }