当前位置: 首页 > article >正文

蓝桥杯—草坪(模拟+bfs分层处理)

目录

一.题目

二.代码

三.错误分析


一.题目

分析:一眼bfs向上下左右四个方向扩散生长,典型的bfs算法,这里需要注意的是需要分层处理

,每一层代表一个月

二.代码

import java.util.Scanner;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static int[] dx = {0,1,-1,0};
    public static int[] dy = {1,0,0,-1};
    static class pair{
        int x;
        int y;
        public pair(int x,int y)
        {
            this.x = x;
            this.y = y;
        }
    }
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int m = scan.nextInt();
        char[][] map = new char[n][m];
        scan.nextLine();
        for(int i = 0;i<n;i++)
        {
            map[i] = scan.nextLine().toCharArray();//将地图信息录入
        }
        int k = scan.nextInt();//k个月,每个月会向上下左右扩展一次
        //输出结果,结果保留在map数组中
        bfs(map,n,m,k);
        for(int i = 0;i<n;i++)
        {
            for(int j = 0;j<m;j++)
            System.out.print(map[i][j]);
            System.out.println();
        }
        scan.close();
    }
    public static void bfs(char[][] map,int n,int m,int k)
    {
        Queue<pair> queue = new LinkedList<>();
        //记录一轮
        for(int i = 0;i<n;i++)
        {
            for(int j = 0;j<m;j++)
            {
                if(map[i][j]=='g')
                {
                    queue.add(new pair(i,j));//将初始有草的地全部入队
                }
            }
        }
        while(!queue.isEmpty()&&k!=0)
        {
          int cnt = queue.size();
          for(int j = 0;j<cnt;j++)//分层处理
          {
            pair top = queue.poll();//出队
            for(int i = 0;i<4;i++)//向四周蔓延
            {
                int xx = top.x + dx[i];
                int yy = top.y + dy[i];
                if(cheak(xx,yy,map))
                {
                    map[xx][yy] = 'g';
                    queue.add(new pair(xx,yy));
                }
            }
          }
          k--;
        }
    }
    public static boolean cheak(int x,int y,char[][] map)//减枝函数
    {
        if(x>=0&&x<map.length&&y>=0&&y<map[0].length&&map[x][y]!='g')
            return true;
        return false;
    }
}

三.错误分析

1.一开始分层处理的思路有问题,分层逻辑混乱


http://www.kler.cn/a/599953.html

相关文章:

  • 【计算机网络运输层详解】
  • 常见框架漏洞—Spring
  • 深度学习篇---PaddleDetectionPaddleOCR
  • 《AI大模型趣味实战 》第7集:多端适配 个人新闻头条 基于大模型和RSS聚合打造个人新闻电台(Flask WEB版) 1
  • Spring Boot - 动态编译 Java 类并实现热加载
  • 自动驾驶背后的数学:ReLU,Sigmoid, Leaky ReLU, PReLU,Swish等激活函数解析
  • 深度强化学习中的深度神经网络优化策略:挑战与解决方案
  • Spring Boot 一个接口实现任意表的 Excel 导入导出
  • Unity图形学Shader快速回顾
  • 如何从后端实现页面跳转?
  • 【区块链通用服务平台及组件】绿信链 | FISCO BCOS 应用案例
  • Python(4)Python函数编程性能优化全指南:从基础语法到并发调优
  • 数据结构---最小生成树
  • 3.23学习总结
  • C#基础学习(四)笑谈C#函数:从“Hello World”到“千变万化”的奇幻之旅
  • Delta Lake 解析:架构、数据处理流程与最佳实践
  • Flink 自定义数据源:从理论到实践的全方位指南
  • 【C++】继承机制:从基础到避坑详细解说
  • Leetcode 3493. Properties Graph
  • Vue 表单输入绑定,双向绑定