poj1919--Red and Black (DFS)

思路:题目是很简单的DFS。求出能走到的"."。因此我们完全不需要回溯,只需要遍历下去,每递归一次则结果+1,最后得出答案。

#include<stdio.h>
char map[20][20];
int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
int m,n;
int ans;
void dfs(int x,int y){
    ans++;               //每次递归结果+1
    map[x][y]='#';          //将走过的标为不能再走的
    for(int i=0;i<4;i++){
        if(x+next[i][0]>=0&&x+next[i][0]<m&&y+next[i][1]>=0&&y+next[i][1]<n&&map[x+next[i][0]][y+next[i][1]]=='.'){
            dfs(x+next[i][0],y+next[i][1]);
        }
    }
}
int main(){
    while(scanf("%d%d",&n,&m)&&m!=0&&n!=0){
        ans=0;
        int tab=0;
        int x,y;
        for(int i=0;i<m;i++)
            scanf("%s",&map[i]);
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(map[i][j]=='@') {//找出起始位置
                    x=i;
                    y=j;
                    tab=1;
                    break;
                }
            }
            if(tab) break;
        }
        dfs(x,y);
        printf("%d\n",ans);
    }
}

 

posted @ 2017-03-27 14:46  Mr.Struggle  阅读(181)  评论(0编辑  收藏  举报