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

搜索篇

时间:2016-07-20 13:19:06      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:

  搜索篇主要介绍深搜、广搜、剪枝和A*算法,下面通过具体的题目进行一一呈现。

  Q1(Problem source : 百练2815):

  描述

请你编写一个程序,计算城堡一共有多少房间,最大的房间有多大。城堡被分割成m?n(m≤50,n≤50)个方块,每个方块可以有0~4面墙。输入程序从标准输入设备读入数据。第一行是两个整数,分别是南北向、东西向的方块数。
在接下来的输入行里,每个方块用一个数字(0≤p≤50)描述。用一个数字表示方块周围的墙,1表示西墙,2表示北墙,4表示东墙,8表示南墙。每个方块用代表其周围墙的数字之和表示。
城堡的内墙被计算两次,方块(1,1)的南墙同时也是方块(2,1)的北墙。输入的数据保证城堡至少有两个房间。输出城堡的房间数、城堡中最大房间所包括的方块数。结果显示在标准输出设备上。
样例输入
4 
7 
11 6 11 6 3 10 6 
7 9 6 13 5 15 5 
1 10 12 7 13 7 5 
13 11 10 8 10 12 13 

样例输出

5
9

 分析:很典型的dfs问题,数据规模不大也不会用到剪枝,这里需要注意的一个运算符优先级的小细节是用位运算符&和==运算符的时候,前面的位运算符要加小括号。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 51;
int Map[maxn][maxn];
int visit[maxn][maxn];
int m , n;
int dfs(int i , int j)
{
     int num = 1;
     visit[i][j] = 1;
     if((Map[i][j] & 1) == 0 && j - 1 >= 1 && visit[i][j-1] == 0)
     {
          num += dfs(i,j-1);
     }
     if((Map[i][j] & 2) == 0 && i - 1 >= 1 && visit[i-1][j] == 0)
     {
          num += dfs(i-1,j);
     }
     if((Map[i][j] & 4) == 0 && j + 1 <= n && visit[i][j+1] == 0)
     {
          num += dfs(i,j+1);
     }
     if((Map[i][j] & 8) == 0 && i + 1 <= m && visit[i+1][j] == 0)
     {
          num += dfs(i+1,j);
     }

     return num;
}
int main()
{

      while(scanf("%d",&m) != EOF)
      {
           scanf("%d",&n);
            for(int i = 1;i <= m;i++)
                  for(int j = 1;j <= n;j++)
                      scanf("%d",&Map[i][j]);

            memset(visit , 0 , sizeof(visit));

            int num = 0;
            int Max = 0;
           // printf("%d ",dfs(1,1));


            for(int i = 1;i <= m;i++)
                  for(int j = 1;j <= n;j++)
                  {
                        if(visit[i][j] == 0)
                        {

                            num++;
                            Max = max(Max , dfs(i,j));
                        }
                         else  continue;
                 }

            printf("%d\n%d\n",num,Max);


      }
}

 

搜索篇

标签:

原文地址:http://www.cnblogs.com/rhythmic/p/5687899.html

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