题目链接:

  http://poj.org/problem?id=1164

题目描述:

  有一个n*m的castle,有一个个小房间组成,每个房间由一个零和四面的墙组成,每个房间都有一个价值,

价值的计算方式是:west_walls价值为1,north_walls价值为2,east_walls价值为4,south_walls价值为8,

walls的价值加在一起就是这个房间的价值。先输入n,m,随后输入n*m的数字矩阵。问castle有几个房间,最大的房间多大?

解题思路:

  利用二进制对每个房间的walls进行状态压缩,然后dfs转化为求连通块问题。(重点在于模型建立)

代码:

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cstdlib>
 4 using namespace std;
 5
 6 #define N 55
 7 int map[N][N], num, sum, n, m;
 8 int dir[][2] = {0,-1, -1,0, 0,1, 1,0};
 9
10 void dfs (int x, int y);
11
12 int main ()
13 {
14     int i, j, max;
15     while (scanf ("%d %d", &n, &m) != EOF)
16     {
17         for (i=0; i<n; i++)
18             for (j=0; j<m; j++)
19                 scanf ("%d", &map[i][j]);
20         num = max = 0;
21         for (i=0; i<n; i++)
22             for (j=0; j<m; j++)
23                 if (map[i][j] != -1)
24                 {
25                     sum = 0;
26                     dfs (i, j);
27                     num ++;
28                     if (max < sum)
29                         max = sum;
30                 }
31         printf ("%d\n%d\n", num, max);
32     }
33     return 0;
34 }
35
36 void dfs (int x, int y)
37 {
38     int s = map[x][y];
39     sum ++;
40     map[x][y] = -1;
41     for (int i=0; i<4; i++)
42     {
43         if (s % 2 == 0)
44         {
45             int a = x + dir[i][0];
46             int b = y + dir[i][1];
47             if (a>=0 && a<n && b<m && b>=0 && map[a][b] != -1)
48                     dfs(a, b);
49         }
50         s /= 2;
51     }
52
53 }

转载于:https://www.cnblogs.com/alihenaixiao/p/4169028.html

poj 1164 The Castle相关推荐

  1. poj 1164城堡问题(DFS)

    #include <iostream> #include <cstring> using namespace std;int R,C; //行列数 int rooms[60][ ...

  2. POJ 1164 放苹果 经典的组合问题

    Description 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. Input 第一行是测试数据的数目t(0 ...

  3. ACM题集以及各种总结大全(转)

    ACM题集以及各种总结大全! 虽然退役了,但是整理一下,供小弟小妹们以后切题方便一些,但由于近来考试太多,顾退役总结延迟一段时间再写!先写一下各种分类和题集,欢迎各位大牛路过指正. 一.ACM入门 关 ...

  4. POJ前面的题目算法思路【转】

    1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...

  5. POJ 超详细分类

    POJ 各题算法 1000    A+B Problem            送分题     49%    2005-5-7 1001    Exponentiation         高精度   ...

  6. 搜索题,留着以后慢慢刷

    转过来,留着以后慢 慢 刷555.. 简单搜索 (1)深度优先搜索 (poj2488,poj3009,poj1321) (2)广度优先搜索 (poj3278,poj1426,poj3126,poj30 ...

  7. java判断素数1037_ACM离线题库超级全

    [实例简介] 超级多的题库有离线的适合没网时做,ACMer必备,有杭电OJ,北大OJ [实例截图] [核心代码] 804f1873-5659-4f1d-bc49-31fa9b551299 └── 题库 ...

  8. 电子学会 青少年软件编程等级考试 C语言 5 级

    5级-2020-12-01-漫漫回国路 5级-2020-12-02-装箱问题 19:装箱问题 OpenJudge - 19:装箱问题 8785:装箱问题 OpenJudge - 8785:装箱问题 1 ...

  9. (精)【ACM刷题之路】POJ题目详细多角度分类及推荐题目

    POJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094) 初期: ...

最新文章

  1. [原创]PipelineTools 文件传输工具
  2. 【BZOJ-3262】陌上花开 CDQ分治(3维偏序)
  3. 基于c++的马氏距离算法代码_监控警戒区基于掩码算法的简单实现(附代码)
  4. 结对开发——求最大值
  5. GPT-3诞生,Finetune也不再必要了!NLP领域又一核弹!
  6. float php 运算_PHP面试经典题目
  7. ubuntu 18.04 ROS melodic 尝试 ROS CANOPEN 控制 AGV
  8. 华硕z97不识别m2固态_固态盘M.2、SATA有这样的差别,难怪大家都选“它”
  9. 内网监控利器——Nagios
  10. [图灵程序设计丛书].持续交付:发布可靠软件的系统方法.pdf
  11. paip.提升用户体验---c++ qt 取消gcc编译的警告信息.txt
  12. 【场外衍生品系列】雪球结构定价研究
  13. linux内核态访问串口,linux内核中串口驱动注册过程(tty驱动)[转]
  14. dataGrid使用deleteRow删除数据时会出现 ‘id‘ of undefined
  15. 如何启用计算机网络共享,无法启用共享访问,教您无法启用共享访问怎么解决...
  16. 一文掌握语义分割PSPNet——证件照制作、抠图(算法原理、Pytorch实现)
  17. 计算机传输方式:串行传输/并行传输、同步传输/异步传输、单工/半双工/全双工
  18. 想要申请PhD,真是路漫漫啊
  19. python气象处理与绘图_Python气象数据处理与绘图(18):泰勒图
  20. Nginx 细说proxy_set_header $remote_addr和X-Forwarded-For

热门文章

  1. 美团配送A/B评估体系建设与实践
  2. 技术债务就像俄罗斯方块,你永远都赢不了!
  3. 说说后台开发的一些事
  4. 一文读懂 Spring的前世今生
  5. LINUX下CPU Load Average的一点研究
  6. 掌握这 11 个方法论,搞定一场完美技术面试!
  7. 史上最全Java多线程面试题及答案
  8. spring security CSRF 问题 Invalid CSRF Token 'null' was found on ......
  9. 48.聊一聊constexpr变量
  10. cgi web 调用多次启动_简单说明CGI和动态请求是什么