hdu1241 求联通快(java)
来源:互联网 发布:simg2img linux 编辑:程序博客网 时间:2024/05/16 00:33
GeoSurvComp地质调查公司负责探测地下石油储量。GeoSurvComp公司在一段时间内在一大块矩形区域内工作,创造出一个网格把土地分成很多方块。如果每一方块单独分析,使用感应设备去测定方块中是否含有石油。含有油的方块称为口袋。如果两个口袋是相邻的,那它们属于同一个油床。油床可以相当大,可以包含众多口袋。你的任务就是测定出有多少不同的油床。
输入:
输入文件包括一个或多个网格。每一个网格输入的第一行含有m和n,分别代表网格的横坐标和纵坐标,被一个空格分开。如果m=0则标志着输入结束;否则1<=m<=100并且1<=n<=100。接下来输入m行n列个网格特征(不记录换行符)。每一个特征值跟一个方块相对应,并且要么是*(代表没油),要么是@代表一个石油口袋。
输出:
对于每一个方块,输出不同的油田数。两个不同的口袋属于同一个油田,如果它们垂直水平或对角相邻。一个油田包含少于100个口袋。
解题思路:遍历所有点,求出连通块的数量,每到一块油田,就采用DFS或者BFS消除该油田以及附近连通的油田。
简单dfs(直接上代码)
package 简单搜索;import java.util.Scanner;/** * Created by user on 2017/8/23. */public class hdu1241 { /** * 联通快 */ static int MAX_N=100+2; static char map[][]=new char[MAX_N][MAX_N]; static int n,m; static boolean vis[][]=new boolean[MAX_N][MAX_N];//用来标记是否是联通快 static int dir[][] = {{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}}; public static void main(String args[]){ Scanner scanner=new Scanner(System.in); while (scanner.hasNext()){ n=scanner.nextInt(); m=scanner.nextInt(); if(n+m==0){ break; } scanner.nextLine(); for(int i=0;i<n;i++){ String str=scanner.nextLine(); char a[]=str.toCharArray(); for(int j=0;j<m;j++){ map[i][j]=a[j]; } } int sum=0; init(); for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(!vis[i][j]&&map[i][j]=='@'){//当从每个点出发搜索的时候 都会标记以改点扩散的油田 当从下个点搜索的时候 sum++;//就直接不搜索改点 dfs(i,j); } } } System.out.println(sum); } } private static void dfs(int x, int y) { vis[x][y]=true; for(int i=0;i<8;i++){ int dx=x+dir[i][0]; int dy=y+dir[i][1]; if(dx>=0&&dx<n&&dy>0&&dy<m&&!vis[dx][dy]&&map[dx][dy]=='@'){ dfs(dx,dy); } } } private static void init() { for(int i=0;i<MAX_N;i++){ for (int j=0;j<MAX_N;j++){ vis[i][j]=false; } } }}
阅读全文
0 0
- hdu1241 求联通快(java)
- HDU1241
- hdu1241
- hdu1241
- HDU1241
- hdu1241
- hdu1241
- hdu1241
- hdu1241
- hdu1241
- hdu1241
- hdu1241
- hdu1241
- HDU1241
- hdu1241
- hdu1241
- hdu1241
- hdu1241
- 残差网络resnet学习
- 遗传算法解决TSP问题(c++实现)
- 网上搜索的 开放的接口 API
- 【s5p4418嵌入式学习】系统编译脚本分析02
- bzoj4275[ONTAK2015]Badania naukowe DP
- hdu1241 求联通快(java)
- 图片上传随笔
- IO流简单用法
- MFC CComboBox 添加字符串显示不正确的解决方法
- 决策树
- 强制类型转换
- CocoaPods基本配置
- mongodb 操作集合
- LintCode-378,二叉树转双链表