深搜之城堡问题
来源:互联网 发布: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);}}
阅读全文
0 0
- 深搜之城堡问题
- 搜索之城堡问题
- POJ 1164 The Castle 深搜入门(城堡问题)
- Dfs之城堡问题(POJ 2815)
- 深度优先搜索之城堡问题
- 城堡问题
- 城堡问题
- 城堡问题
- 城堡问题
- 城堡问题
- 城堡问题
- 城堡问题
- 深度优先搜索之入门问题->城堡问题
- C++搜索与回溯算法之城堡问题
- OPENJUDGE 2815 城堡问题
- OpenJudge - 2815:城堡问题
- openjudge城堡问题
- 百练城堡问题
- matlab中矩阵的操作
- 支持向量机
- 收集了一部分恶意IP
- 有序二叉树的创建与遍历
- 机器学习方法篇(12)------拉格朗日乘子法
- 深搜之城堡问题
- [LeetCode]207. Course Schedule
- 本地git项目上传到github
- 005-我对冒泡排序的理解
- 10-1
- Ubuntu下编译安装nginx,添加rtmp模块,推流、拉流播放
- IDEA使用-善假于物
- Django--自定义Field
- 155. Min Stack