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

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

#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;
}
原文地址:https://www.cnblogs.com/chenxiwenruo/p/3321782.html