【DFS】Java解决The Castle城堡问题(IOI 1994、POJ1164)
创始人
2025-05-31 13:04:11
0

文章目录

  • 问题描述
  • 解决思路
  • DFS遍历图的递归算法框架
  • Java代码

问题描述

题目来源于1994年IOI信息学奥林匹克竞赛。
POJ1166 题目提交网址:http://poj.org/problem?id=1164
在这里插入图片描述
Figure 1 shows the map of a castle.Write a program that calculates

  1. how many rooms the castle has
  2. how big the largest room is

The castle is divided into m * n (m<=50, n<=50) square modules. Each such module can have between zero and four walls.
Input
Your program is to read from standard input. The first line contains the number of modules in the north-south direction and the number of modules in the east-west direction. In the following lines each module is described by a number (0 <= p <= 15). This number is the sum of: 1 (= wall to the west), 2 (= wall to the north), 4 (= wall to the east), 8 (= wall to the south). Inner walls are defined twice; a wall to the south in module 1,1 is also indicated as a wall to the north in module 2,1. The castle always has at least two rooms.
Output
Your program is to write to standard output: First the number of rooms, then the area of the largest room (counted in modules).
Sample Input
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
Sample Output
5
9

解决思路

把方块看成节点,相邻的两个方块如果之间没有墙,则在方块之间连接一条边,这样城堡就能转换成一个图。
题目中给出的“地图”即可转换为如下图所示的图,寻找城堡数即转换为寻找极大联通子图的数量。
在这里插入图片描述

根据深度优先搜索的算法,从一个节点出发,便可以找到该节点的极大联通子图,并做标记(以防重复寻找),然后继续寻找下一个节点所在极大联通子图。

思路:依次对每一个节点(房间)开始进行深度优先搜索,给该节点的极大联通子图上色,并全部标记为旧节点,然后继续寻找下一个为被搜索的节点(房间)。
在这里插入图片描述
上图中可以看出一共有5个房间(极大联通子图),最大的有9个节点

DFS遍历图的递归算法框架

DFS(V){if(V是旧节点) return;将V标记为旧节点;对和V相邻的每个节点U{DFS(U);}
}
int main(){初始化;将所有节点标记为新点;while(图中能找到新点W){DFS(W);}
}

Java代码


import java.util.Scanner;public class Main {public static void main(String[] args) {Solution solution = new Main().new Solution();int R,C;Scanner scanner = new Scanner(System.in);R = scanner.nextInt(); // 几行C = scanner.nextInt(); // 几列int[][] rooms = new int[R][C];for (int i = 0; i < R; i++) {for (int j = 0; j < C; j++) {rooms[i][j] = scanner.nextInt();}}solution.solve(R,C,rooms);}class Solution{int R,C;int maxRoomArea = 0;int colorNum = 0;int roomArea = 0; // 用于临时记录个房间的大小int[][] colors,rooms; // rooms 原始房间地图  colors用于记录颜色()public void solve(int R,int C,int[][] rooms){this.R = R;this.C = C;this.maxRoomArea = 0; // 最大房间的大小this.colorNum = 0; // 颜色序号,0为未上色(没有搜过),this.roomArea = 0;this.colors = new int[R][C]; // 默认初始化所有点为0this.rooms = rooms;for(int i = 0;i < R;i++){for(int j = 0;j < C;j++){if(colors[i][j]==0){ // 找到一个新节点colorNum++; // roomArea = 0;DFS(i,j);maxRoomArea = Math.max(maxRoomArea,roomArea);}}}System.out.println(colorNum);System.out.println(maxRoomArea);}public void DFS(int i,int j) {if(colors[i][j] != 0)return; // 旧点,返回colors[i][j] = colorNum; // 上色roomArea++; 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);}}
}

在这里插入图片描述
参考: 《算法基础与在线实践》刘家瑛等

相关内容

热门资讯

“嫣然医院欠租风波”房东方最新... 近日,李亚鹏及其创立的嫣然天使儿童医院陷入“欠租风波”,引发关注。(相关报道:) 今天(1月22日)...
香港邵氏兄弟收购正午阳光!华人... 影视行业或将上演一出“蛇吞象”的资本戏码。 1月21日晚间,邵氏兄弟(00953.HK)公告宣布,拟...
深夜大涨!现货黄金首次站上49... 23日早盘,现货黄金持续拉涨,盘中最高站上4959美元/盎司,截至发稿小幅回落,报4937.090美...
玲珑轮胎终止香港上市 1月23日,山东玲珑轮胎股份有限公司公告披露,决定终止此前筹划的发行H股股票并于香港联交所主板上市的...
英特尔盘后惨跌!Q4业绩超预期... 智通财经获悉,英特尔(INTC.US)股价在公布最新财报后大跌,原因是该公司首席执行官陈立武给出了乏...
商业银行争夺“年终奖” 岁末年初,多家国有大行、股份行及理财子公司已经打响年终奖“吸金”争夺战。 针对年终奖,多家银行打造“...
华安基金管理有限公司 关于华安... 近期,华安基金管理有限公司(以下简称“本公司”)旗下华安国际龙头(DAX)交易型开放式指数证券投资基...
比利时首相达沃斯语出惊人:做一... 欧洲对美国的焦虑和反抗,成为这一届达沃斯论坛不可磨灭的主题,其中比利时首相巴尔特·德韦弗的一句发言可...
广州珠江发展集团股份有限公司2... 本公司董事会及全体董事保证本公告内容不存在任何虚假记载、误导性陈述或者重大遗漏,并对其内容的真实性、...
白色石油价值重估,锂价能否突破... 汇通财经APP讯——2025年碳酸锂市场在供应过剩与价格深跌的动荡中触底,随着模块化储能需求的爆发式...
美国总统特朗普:杰米·戴蒙让我... 美国总统特朗普:杰米·戴蒙让我失去了银行账户。 来源:金融界AI电报
GPU创企曦望一年融资30亿:... 曦望表示,所筹资金将用于下一代推理GPU研发、规模化量产及生态共建。 资料显示,曦望成立于2020...
【网络股指数ETF收涨1.9%... 【网络股指数ETF收涨1.9%,领跑美股行业ETF】周四(1月22日),网络股指数ETF收涨1.91...
佩蒂股份:新西兰品牌上市计划稳... 1月9日,佩蒂股份(300673)在交易所官方互动平台回应投资者提问时表示,公司新西兰主粮工厂目前已...
特朗普起诉美国最大银行 新华社纽约1月22日电(记者刘亚南 徐静)据美国媒体22日报道,美国总统特朗普对美国最大银行摩根大通...
行业调查称英国零售商颓势有所缓... 中新网伦敦1月22日电(记者 欧阳开宇)英国工业联合会(CBI)22日发布的调查显示,本月英国零售商...
和讯投顾周翔:超级主力完成出货... 当前A股市场出现了一些令人关注的现象,确实让不少投资者感到困惑和不安。今天上证50ETF成交创下了1...
业务承压、回款滞后!成都路桥2... 1月22日,成都路桥(002628)披露2025年度业绩预告,预计2025年归母净利润亏损6500万...
美股爆发,黄金直拉!特朗普:将... 1月22日晚间,美股全线走高。消息面上,美国总统特朗普最新表示,正在推进中的格陵兰岛协议将赋予美国“...
原创 楼... 作为一名长期关注中国房地产市场的观察者,我见证了无数家庭在这个市场中的起伏。扎根于地产研究的十八年经...