当前位置: 代码迷 >> 综合 >> 蓝桥杯31天冲刺 Day10
  详细解决方案

蓝桥杯31天冲刺 Day10

热度:90   发布时间:2023-11-27 09:34:32.0

蓝桥杯31天冲刺 Day10

  • 扫地机器人
  • 全球变暖

扫地机器人

链接: 扫地机器人

在这里插入图片描述

全球变暖

链接: 全球变暖.
在这里插入图片描述
贴一道力扣题,和这个相似:链接: 200. 岛屿数量.

AC代码:

class Solution {
    public int numIslands(char[][] grid) {
    int count=0;for(int i =0;i<grid.length;i++){
    for(int j=0;j<grid[i].length;j++){
    if(grid[i][j] == '1'){
    count++;islands(grid,i,j);}}}return count;}public void islands(char[][] grid,int i,int j){
    grid[i][j] = '0';int[] dx = {
    1,0,-1,0};int[] dy = {
    0,1,0,-1};for(int k =0;k<4;k++){
    int xx = i+dx[k];int yy = j+dy[k];if(xx>=0&&yy>=0&&xx<grid.length&&yy<grid[0].length){
    if(grid[xx][yy] == '1')islands(grid,xx,yy);}}}
}

相当于BFS+DFS
主要就是遇到空地‘#’就进行判断、更改

我们将k记作临近水域的空地
w记为不临近水域的空地

通过BFS判断是否有空地可以更改
通过DFS进行周围空地的更改

完整代码:

package 题库;
import java.util.*;
public class 全球变暖 {
    public static int[] dx = {
    -1,0,1,0};public static int[] dy = {
    0,-1,0,1};public static int n;public static char[][] picture;public static int island(int i,int j) {
    int res = 0;//判断#周围是否有水域(修改k)for(int k =0;k<4;k++) {
    int xx = i+dx[k];int yy = j+dy[k];if(xx<0||xx>=n||yy<0||yy>=n||picture[xx][yy]!='.')continue;picture[i][j] = 'k';}//修改wif(picture[i][j] !='k') {
    picture[i][j] = 'w';res++;}//递归修改该岛屿其他部分for(int k =0;k<4;k++) {
    int xx = i+dx[k];int yy = j+dy[k];if (xx < 0 || yy < 0 || xx >= n || yy >= n) {
    continue;}if(picture[xx][yy] == '#')res+=island(xx,yy);}return res;}public static void main(String[] args) {
    // TODO Auto-generated method stubScanner sc = new Scanner(System.in);int pre=0;int after=0;n = sc.nextInt();picture = new char[n][n];for(int i =0;i<n;i++) {
    picture[i] = sc.next().toCharArray();}for(int i=0;i<n;i++) {
    for(int j=0;j<n;j++) {
    if(picture[i][j] == '#') {
    pre++;if(island(i,j)>0)after++;}}}System.out.println(pre-after);}}