宝岛探险_探险岛

时间:2021年06月19日 18:26:25
题目描述

一个小岛由一个主岛和一些复附属岛屿组成,该岛使用一个二维矩阵表示,其中数字表示海拔,0表示海洋,1~9表示陆地。探险家乘坐飞机降落在(6,8)处,现在需要统计探险家降落的小岛的面积大小,我们将探险家降落点上下左右相连接的陆地视作同一个岛屿

测试样例 10 10 6 81 2 1 0 0 0 0 0 2 33 0 2 0 1 2 1 0 1 24 0 1 0 1 2 3 2 0 13 2 0 0 0 1 2 4 0 00 0 0 0 0 0 1 5 3 00 1 2 1 0 1 5 4 3 00 1 2 3 1 3 6 2 1 00 0 3 4 8 9 7 5 0 00 0 0 3 7 8 6 0 1 20 0 0 0 0 0 0 0 1 0 测试结果 38 示范代码 import java.util.Scanner;/*测试数据10 10 6 81 2 1 0 0 0 0 0 2 33 0 2 0 1 2 1 0 1 24 0 1 0 1 2 3 2 0 13 2 0 0 0 1 2 4 0 00 0 0 0 0 0 1 5 3 00 1 2 1 0 1 5 4 3 00 1 2 3 1 3 6 2 1 00 0 3 4 8 9 7 5 0 00 0 0 3 7 8 6 0 1 20 0 0 0 0 0 0 0 1 0* //** * Created by handsome programmer with IntelliJ IDEA. * User: chen * Date: 18-12-6 * Time: 上午3:03 * Description: 宝岛探险 * * @author chen */public class Search {public static void main(String[] args) {// 定义四个方向int[][] next = {// 向右走{0, 1},// 向左走{0, -1},// 向上走{1, 0},// 向下走{-1, 0}};Scanner scanner = new Scanner(System.in);// 地图大小,n行m列int n = scanner.nextInt();int m = scanner.nextInt();// 起始位置int startX = scanner.nextInt();int startY = scanner.nextInt();// 标记数组int[][] mark = new int[n + 1][m + 1];// 遍历队列Node[] queue = new Node[n * m + 1];// 加载地图int[][] map = new int[n + 1][m + 1];for (int i = 1; i map[i][j] = scanner.nextInt();}}// 初始化队列两个游标int head = 1;int tail = 1;// 将降落的起始坐标插入队列Node node = new Node(startX, startY);queue[tail++] = node;// 将降落点标记为已遍历mark[startX][startY] = 1;int sum = 1;while (head // 下一个的坐标int x = queue[head].getX() + next[i][0];int y = queue[head].getY() + next[i][1];// 判断是否越界if (xn || ym) {continue;}// 判断是否遍历过该点并且改点是否是陆地if (map[x][y] != 0 && mark[x][y] == 0) {sum++;// 入队该节点并标记为已遍历queue[tail++] = new Node(x, y);mark[x][y] = 1;}}head++;}// 输出岛的大小System.out.println("岛的大小为:" + sum);}}class Node {/** * 横坐标 */private int x;/** * 纵坐标 */private int y;public Node(int x, int y) {this.x = x;this.y = y;}public Node() {}public int getX() {return x;}public void setX(int x) {this.x = x;}public int getY() {return y;}public void setY(int y) {this.y = y;}}

宝岛探险

https://blog.csdn.net/qq_33466466/article/details/84846169