博客
关于我
蓝桥杯 2016年javaB组原题剪邮票 (bfs+暴力迭代)
阅读量:792 次
发布时间:2019-03-25

本文共 2685 字,大约阅读时间需要 8 分钟。

剪邮票问题可视化为图形中寻找五个互相连接的点的问题。该图形由12张邮票组成,呈现3行4列的结构。用户的目标是从中剪取五张连续连接的邮票,仅仅连接一个边不算连续。

问题分析

将邮票排列的二维坐标视为一个3行4列的网格点。每个点的坐标为(i, j),其中i范围[1,3],j范围[1,4]。需要从中选择五个点,使得这五个点彼此连贯(上下左右相邻),无孤立点。

方法思路

针对该问题,可以采用广度优先搜索(BFS)遍历图形。首先,确定起点和终点,然后使用BFS检查是否所有点都被访问到。

  • 图形初始化:创建一个3x4的网格,标记是否访问过。
  • 起点和终点:根据输入点位置,设定起点和终点。
  • BFS遍历:从起点出发,逐层扩展,判断终点是否被访问。
  • 解决代码

    import java.util.Arrays;import java.util.LinkedList;import java.util.Queue;public class L2016剪邮票 {    static boolean vis[][] = new boolean[3][4];    static int mp[][] = new int[3][4];    static int dx[] = { -1, 0, 1, 0 };    static int dy[] = { 0, -1, 0, 1 };    static class d {        int x;        int y;        public d(int x, int y) {            this.x = x;            this.y = y;        }    }    static Queue
    q = new LinkedList<>(); static d end; static void init() { for (int i = 0; i < 3; i++) { Arrays.fill(vis[i], false); Arrays.fill(mp[i], -1); // 障碍 } } static boolean Check(int x, int y) { if (x >= 0 && y >= 0 && x < 3 && y < 4 && mp[x][y] != -1) return true; return false; } static void bfs(int x, int y) { end = new d(x, y); q.add(end); while (!q.isEmpty()) { d now = q.poll(); for (int i = 0; i < 4; i++) { int xx = now.x + dx[i]; int yy = now.y + dy[i]; if (Check(xx, yy) && !vis[xx][yy]) { vis[xx][yy] = true; d next = new d(xx, yy); q.add(next); } } } } public static void main(String[] args) { int ans = 0; for (int i = 0; i < 12; i++) { for (int j = i + 1; j < 12; j++) { for (int k = j + 1; k < 12; k++) { for (int l = k + 1; l < 12; l++) { for (int m = l + 1; m < 12; m++) { init(); mp[i/4][i%4] = 1; mp[j/4][j%4] = 1; mp[k/4][k%4] = 1; mp[l/4][l%4] = 1; mp[m/4][m%4] = 1; vis[i/4][i%4] = true; bfs(i/4, i%4); if (vis[i/4][i%4] && vis[j/4][j%4] && vis[k/4][k%4] && vis[l/4][l%4] && vis[m/4][m%4]) { ans++; } } } } } } System.out.println(ans); }}

    答案

    经过计算,共有116种不同的剪取方法。

    感受

    这道题在于将实际问题转化为图的遍历问题,通过BFS验证连通性。暴力枚举虽然不够优化,但在小规模数据下仍然有效。

    转载地址:http://mjiuk.baihongyu.com/

    你可能感兴趣的文章
    mysqli
    查看>>
    MySQLIntegrityConstraintViolationException异常处理
    查看>>
    mysqlreport分析工具详解
    查看>>
    MySQLSyntaxErrorException: Unknown error 1146和SQLSyntaxErrorException: Unknown error 1146
    查看>>
    Mysql_Postgresql中_geometry数据操作_st_astext_GeomFromEWKT函数_在java中转换geometry的16进制数据---PostgreSQL工作笔记007
    查看>>
    mysql_real_connect 参数注意
    查看>>
    mysql_secure_installation初始化数据库报Access denied
    查看>>
    MySQL_西安11月销售昨日未上架的产品_20161212
    查看>>
    Mysql——深入浅出InnoDB底层原理
    查看>>
    MySQL“被动”性能优化汇总
    查看>>
    MySQL、HBase 和 Elasticsearch:特点与区别详解
    查看>>
    MySQL、Redis高频面试题汇总
    查看>>
    MYSQL、SQL Server、Oracle数据库排序空值null问题及其解决办法
    查看>>
    mysql一个字段为空时使用另一个字段排序
    查看>>
    MySQL一个表A中多个字段关联了表B的ID,如何关联查询?
    查看>>
    MYSQL一直显示正在启动
    查看>>
    MySQL一站到底!华为首发MySQL进阶宝典,基础+优化+源码+架构+实战五飞
    查看>>
    MySQL万字总结!超详细!
    查看>>
    Mysql下载以及安装(新手入门,超详细)
    查看>>
    MySQL不会性能调优?看看这份清华架构师编写的MySQL性能优化手册吧
    查看>>