zoukankan      html  css  js  c++  java
  • 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
    ",ans);
        }
    }
  • 相关阅读:
    叶问14
    叶问13
    叶问12
    叶问11
    叶问10
    叶问9
    Java三种循环之间的区别
    利用Java对象数组制作简易学生管理系统
    什么叫java方法重载?
    Java编译器的常量优化
  • 原文地址:https://www.cnblogs.com/lvcoding/p/6626678.html
Copyright © 2011-2022 走看看