HDU1312

菜鸡的第一道DFS

感悟

首先,DFS和BFS都是暴力搜索的一种,一种搜索的规则。BFS,层搜索,DFS,深度搜索。均是找到满足条件的地方停止。

理解这道题的DFS,可以这样想。

首先假定i均为1,记着是所有啊!

然后,把方向一个一个带进去(即下一个坐标),且这个坐标是合情合理的

就会发现,它一直沿着树的最左边走。

细节

说一些细节方面的东西。

首先,参数是全局的

其次DFS函数体开头就标记该路径被查到,次数加一。

 

 

#include<bits/stdc++.h>
using namespace std;
char room[23][23];
int dir[4][2]={
    {-1,0},
    {0,-1},
    {1,0},
    {0,1}
};
int Wx,Hy,num;
#define CHECK(x,y) (x<Wx&&x>=0&&y>=0&&y<Hy)
struct node {int x,y;};
void DFS(int dx,int dy)
{
    room[dx][dy]='#';
    num++;
    for(int i=0;i<4;i++){
        int newx=dx+dir[i][0];
        int newy=dy+dir[i][1];
        if(CHECK(newx,newy)&&room[newx][newy]=='.'){
            DFS(newx,newy);
        }
    }
}
int main()
{
    int x,y,dx,dy;
    while(cin>>Wx>>Hy){
        if(Wx==0&&Hy==0){
            break;
        }
        for(y=0;y<Hy;y++){
            for(x=0;x<Wx;x++){
                cin>>room[x][y];
                if(room[x][y]=='@'){
                    dx=x;
                    dy=y;
                }
            }
        }
        num=0;
        DFS(dx,dy);
        cout<<num;
    }
}

 

posted @ 2021-04-06 22:49  南理工学渣  阅读(61)  评论(0)    收藏  举报