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

深度优先搜索(dfs),城堡问题

时间:2016-03-02 23:30:39      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:

题目链接:http://poj.org/problem?id=1164

1、深搜,每个点都访问一次,没有标记的话,就做深搜,同时标记。

#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std;

int r,c;
int rooms[60][60],color[60][60];
int MAX=0,NUM=0;
int area;

void dfs(int i,int j)
{
    if(color[i][j]!=0)
        return ;
    else
    {
        color[i][j]=1;
        area++;
        if((rooms[i][j]&1)==0) dfs(i,j-1);///向西
        if((rooms[i][j]&2)==0) dfs(i-1,j);///向北
        if((rooms[i][j]&4)==0) dfs(i,j+1);///向东
        if((rooms[i][j]&8)==0) dfs(i+1,j);///向南
    }
}

int main()
{
    cin>>r>>c;
    memset(color,0,sizeof(color));
    for(int i=1; i<=r; i++)
        for(int j=1; j<=c; j++)
            cin>>rooms[i][j];
    for(int i=1; i<=r; i++)
    {
        for(int j=1; j<=c; j++)
        {
            if(color[i][j]==0)
            {
                NUM++;
                area=0;
                dfs(i,j);
                MAX=max(MAX,area);
            }
        }
    }
    cout<<NUM<<endl<<MAX;
    return 0;
}

 

深度优先搜索(dfs),城堡问题

标签:

原文地址:http://www.cnblogs.com/TreeDream/p/5236801.html

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