POJ 1979 Red and Black(水题,递归)

时间:2021-11-15 06:16:29

一开始理解错题意了,以为是走过的砖不能再重复走,最多能走多少个黑砖,结果写的递归陷入死循环。。。
后来才明白原来可以重复走,问可以到达的磁砖数。

#include <iostream>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include <algorithm> using namespace std;
int w,h,num,ans;
int f[][];//存储地图的信息,为0代表是黑砖,为1代表红砖,2代表已走过该砖 void search(int row,int col){
if(row<||row>h||col<||col>w){
return;
}
if(f[row][col]==||f[row][col]==)
return;
num++;
f[row][col]=; search(row,col-);
search(row,col+);
search(row-,col);
search(row+,col); }
int main()
{
int px,py;
char str[];
while(scanf("%d%d",&w,&h)!=EOF){
if(w== && h==)
break;
memset(f,,sizeof(f));
num=;
ans=;
for(int i=;i<=h;i++){
scanf("%s",str);
//一开始j从1开始了,囧。。。
for(int j=;j<w;j++){
if(str[j]=='#')
f[i][j+]=;
else if(str[j]=='@'){
//f[i][j]=2;
px=i;
py=j+;
}
}
}
search(px,py);
printf("%d\n",num);
}
return ;
}