深搜之城堡问题

来源:互联网 发布:matlab gui 编程实例 编辑:程序博客网 时间:2024/04/30 11:26

 输入:程序从标准输入设备读入数据。 

第一行是两个整数,分别是南北向、东西向的方块数。在接下来的输入行里,每个方块用一个数字(0≤p≤50)描述。用一个数字表示方块周围的墙,1表示西墙,2表示北墙,4表示东墙,8表示南墙。每个方块用代表其周围墙的数字之和表示。城堡的内墙被计算两次,方块(1,1)的南墙同时也是方块(2,1)的北墙。输入的数据保证城堡至少有两个房间。 输出  城堡的房间数、城堡中最大房间所包括的方块数。结果显示在标准输出设备上。

老师说这是一道基本题,思路确实很基本,该有的注释都在代码里了:

package DFS;import java.util.Scanner;public class Castle {public static int n;public static int m;//一个房间最多空格数public static int max_room=0;//当前正在遍历的路径上已有的空格数public static int now_room;//房间数public static int room_num=0;public static int [][]color;public static int [][]room;public static void main(String args[]) {Scanner scan=new Scanner(System.in);n=scan.nextInt();m=scan.nextInt();room=new int[n][m];for(int i=0;i<n;i++) {for(int j=0;j<m;j++)room[i][j]=scan.nextInt();}color=new int[n][m];for(int i=0;i<n;i++) {for(int j=0;j<m;j++)color[i][j]=0;}for(int i=0;i<n;i++) {for(int j=0;j<m;j++) {//经过前面的遍历,肯定把在同一个房间里的格子全部着上色了,//因此如果再次找到没有被着上色的空格,则表示开辟新的房间if(color[i][j]==0) {room_num++;now_room=0;dfs(i,j);max_room=Math.max(now_room, max_room);}}}System.out.println(room_num);System.out.println(max_room);}public static void dfs(int x,int y) {if(color[x][y]!=0)return;now_room++;color[x][y]=room_num;if((room[x][y]&1)==0) dfs(x,y-1);if((room[x][y]&2)==0)dfs(x-1,y);if((room[x][y]&4)==0)dfs(x,y+1);if((room[x][y]&8)==0)dfs(x+1,y);}}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 母兔子吃小兔子怎么办 照片照出来背亮景人是黑的怎么办 手机透明壳变黄了怎么办 ae视频渲染太慢怎么办 3ce口红太干了怎么办 中考误用0.38mm的笔怎么办 ps画笔都锁住了怎么办 削铅笔机坏了怎么办 幼儿园小朋友不听老师话怎么办 孩子在幼儿园不听老师话怎么办 幼儿园大班孩子上课不好好上怎么办 脸上挠了血印子怎么办 大班公开课烫伤了怎么办教案 孩子心理出现了问题该怎么办 幼师打孩子很多家长告怎么办 课堂上纪律不好的学生怎么办 孩子上幼儿园总感冒怎么办 孩子上幼儿园总生病怎么办 台湾人抗拒统大陆人中国人怎么办 如果一年的公休日耍不完怎么办 我一个月要歇三天班怎么办 学校没给报到证怎么办 员工休息一天老板拉着脸怎么办 换工作了报到证怎么办 幼儿园的孩子不写作业怎么办 幼儿园宝宝不写作业怎么办 幼儿园孩子不写作业怎么办 光盘数据面写字了怎么办 娃娃的手断了怎么办 联币金融跑路了怎么办 胃消化不了想吐怎么办 吃撑了恶心想吐怎么办 mac口红膏体晃动怎么办 excl图标和以前不一样了怎么办 冰箱显示板坏了怎么办 冰箱电脑显示屏坏了怎么办 冰箱的电子显示屏坏了怎么办 指导别人炒股亏损了怎么办 没有协议委托别人炒股亏损怎么办 炒股亏了很多钱崩溃了怎么办 帮人炒股亏了很多钱怎么办