码迷,mamicode.com
首页 > 其他好文 > 详细

HDU-1312题解(DFS)

时间:2020-02-01 10:59:54      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:font   style   center   main   space   show   矩形   相对   nbsp   

HDU-1312-DFS

Written by Void-Walker    2020-02-01 09:09:25

1.题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1312

2.题目大意:

有一个矩形房间,房间里有红砖块(‘#’)和黑砖块(‘.’)组成。现在有一个人站在一个@上面,他只能走黑色方块,现在问他最多能经过多少黑色方块。(他的初始位置也算)

3.题目思路:

这道题是一个非常经典的深度优先搜索。我们从他的初始位置开始搜索:

for(y=0;y<hy;y++)
{
    for(x=0;x<wx;x++)
    {
        cin>>room[x][y];
        if(room[x][y]==@)
        {
                    dx=x;
            dy=y;
        }
    }
}

注意,认真读题,我们输入的两个尺寸参数第一个是数列,第二个才是横行,输入的时候要小心。之后,我们获得了初始位置就可以开始DFS了。

void DFS(int dx,int dy)
{
    room[dx][dy]=#;
    num++;
    for(int i=0;i<4;i++)
    {
        int newx=dx+dirx[i];
        int newy=dy+diry[i];
        if(CHECK(newx,newy) && room[newx][newy]==.)
        {
            DFS(newx,newy);    
        }    
    }
}

我们采用了一种非常巧妙的方法,每次搜索到一个点的时候,将这个点统一标记为红点,避免重复搜索。

这里的DFS非常经典,不包含其他拐弯抹角的地方,所以思想难度相对简单。

最后给出完整的代码:

#include<bits/stdc++.h>
using namespace std;
char room[21][21];
int dirx[5]={0,1,-1,0};
int diry[5]={1,0,0,-1};
int i,j;
int wx,hy,num;
bool CHECK(int x,int y)
{
    if(x<wx && x>=0 && y<hy && y>=0 ) return true;
    else return false;
}
void DFS(int dx,int dy)
{
    room[dx][dy]=#;
    num++;
    for(int i=0;i<4;i++)
    {
        int newx=dx+dirx[i];
        int newy=dy+diry[i];
        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<<endl;
    }
} 

 

HDU-1312题解(DFS)

标签:font   style   center   main   space   show   矩形   相对   nbsp   

原文地址:https://www.cnblogs.com/Warframe-Gauss/p/12247607.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!