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

各大网站域名说明书得制作需要哪些材料

各大网站域名,说明书得制作需要哪些材料,太原网站开发工程师,网站用户体验解决方案迷宫与陷阱 题目描述 小明在玩一款迷宫游戏,在游戏中他要控制自己的角色离开一间由 NNNN 个格子组成的 2D 迷宫。 小明的起始位置在左上角,他需要到达右下角的格子才能离开迷宫。 每一步,他可以移动到上下左右相邻的格子中(前…

迷宫与陷阱

题目描述

小明在玩一款迷宫游戏,在游戏中他要控制自己的角色离开一间由 N×NN×N 个格子组成的 2D 迷宫。

小明的起始位置在左上角,他需要到达右下角的格子才能离开迷宫。

每一步,他可以移动到上下左右相邻的格子中(前提是目标格子可以经过)。

迷宫中有些格子小明可以经过,我们用 '.' 表示。

有些格子是墙壁,小明不能经过,我们用 '#' 表示。

此外,有些格子上有陷阱,我们用 'X' 表示。除非小明处于无敌状态,否则不能经过。

有些格子上有无敌道具,我们用 '%' 表示。

当小明第一次到达该格子时,自动获得无敌状态,无敌状态会持续 KK 步。

之后如果再次到达该格子不会获得无敌状态了。

处于无敌状态时,可以经过有陷阱的格子,但是不会拆除/毁坏陷阱,即陷阱仍会阻止没有无敌状态的角色经过。

给定迷宫,请你计算小明最少经过几步可以离开迷宫?

输入描述

输入描述

第一行包含两个整数 N,K (1≤N≤1000,1≤K≤10)N,K (1≤N≤1000,1≤K≤10)。

以下 NN 行包含一个 N×NN×N 的矩阵。

矩阵保证左上角和右下角是 '.'。

输出描述

一个整数表示答案。如果小明不能离开迷宫,输出 -1。

输入输出样例

示例

输入

5 3
...XX
##%#.
...#.
.###.
.....

输出

10

运行限制

  • 最大运行时间:3s
  • 最大运行内存: 256M

总通过次数: 1649  |  总提交次数: 2154  |  通过率: 76.6%

难度: 困难   标签: 2018, 国赛, BFS

迷宫与陷阱问题:带状态BFS算法详解

算法思路

本问题需要在经典BFS基础上增加​​无敌状态​​的维度,核心思路是:

  1. ​状态表示​​:每个位置(x,y)叠加当前剩余无敌步数s,形成三元组(x, y, s)。不同无敌步数的同一位置视为不同状态。
  2. ​无敌状态规则​​:
    • 陷阱X:仅当无敌步数s>0时可通行,通过后步数减1
    • 道具%:首次到达时重置无敌步数为K(覆盖原有状态),后续到达仅继承剩余步数
  3. ​BFS扩展​​:从队列取出状态后,向四个方向扩展新状态:
    • 计算基础无敌步数ns_base = (s>0 ? s-1 : 0)
    • 根据格子类型调整最终无敌步数ns
  4. ​终止条件​​:首次到达终点(N-1, N-1)时返回步数(BFS保证最小步数)
代码实现
#include <iostream>
#include <cstring>
using namespace std;const int MAXN = 1005;
const int MAXK = 11; // K∈[1,10] 状态数0~K共11种
const int MAXS = MAXN * MAXN * MAXK; // 最大状态数int n, K;
char grid[MAXN][MAXN];
bool got[MAXN][MAXN];   // 道具是否已获取
int dist[MAXN][MAXN][MAXK]; // dist[x][y][s] = 最小步数
int qx[MAXS], qy[MAXS], qs[MAXS]; // 数组模拟队列
int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, 1, 0, -1};int bfs() {memset(dist, -1, sizeof(dist));memset(got, false, sizeof(got));int front = 0, rear = 0;// 初始化起点dist[0][0][0] = 0;qx[rear] = 0;qy[rear] = 0;qs[rear] = 0;rear++;while (front < rear) {int x = qx[front];int y = qy[front];int s = qs[front];front++;int step = dist[x][y][s];// 到达终点if (x == n-1 && y == n-1) return step;// 向四个方向扩展for (int i = 0; i < 4; i++) {int nx = x + dx[i];int ny = y + dy[i];// 边界检查if (nx < 0 || nx >= n || ny < 0 || ny >= n) continue;// 遇到墙壁if (grid[nx][ny] == '#') continue;// 遇到陷阱且无无敌状态if (grid[nx][ny] == 'X' && s == 0) continue;// 计算基础无敌步数(移动消耗1步)int ns_base = (s > 0) ? s - 1 : 0;int ns = ns_base; // 默认值// 道具格子处理if (grid[nx][ny] == '%') {if (!got[nx][ny]) {got[nx][ny] = true; // 标记道具已获取ns = K;             // 重置无敌状态}}// 状态未访问过则入队if (dist[nx][ny][ns] == -1) {dist[nx][ny][ns] = step + 1;qx[rear] = nx;qy[rear] = ny;qs[rear] = ns;rear++;}}}return -1; // 无法到达终点
}int main() {cin >> n >> K;for (int i = 0; i < n; i++)cin >> grid[i];cout << bfs() << endl;return 0;
}
代码解析
  1. ​状态存储​​:

    • dist[x][y][s]:记录到达(x,y)且剩余无敌步数s的最小步数
    • got[x][y]:标记道具格子是否已被获取
    • 数组qx, qy, qs模拟队列,避免STL开销
  2. ​核心逻辑​​:

    • ​陷阱处理​​(L38-40):仅当当前状态s>0时允许通过
    • ​道具重置​​(L47-51):首次到达时重置无敌步数为K
    • ​状态更新​​(L54-60):仅当新状态未访问过时入队
  3. ​终止条件​​(L28-29):首次到达终点立即返回(BFS性质保证最小步数)

实例验证
输入:
5 3
...XX
##%#.
...#.
.###.
.....输出:10

​执行过程解析​​:

  1. 起点(0,0,0) → 向右到(0,1,0)(步数1)
  2. 继续向右到(0,2,0) → 向下到道具格(1,2,3)(重置无敌,步数3)
  3. 利用无敌状态穿越陷阱:
    • (1,2,3) → (2,2,2) → (3,2,1) → (4,2,0)
  4. 向下移动:
    • (4,2,0) → (4,3,0) → (4,4,0)(步数10)

路径可视化:
https://example.com/maze_path.png
绿色路径为最优解,红色数字表示步数

注意事项
  1. ​状态去重​​:

    • 每个状态(x,y,s)只扩展一次(dist数组保证)
    • 同一位置不同无敌步数视为独立状态
  2. ​道具全局性​​:

    • got数组标记道具获取状态(全局唯一)
    • 重置无敌状态会覆盖原有步数(非叠加)
  3. ​边界情况​​:

    • 起点和终点保证为'.'
    • K=1时需测试无敌状态传递
    • 终点可能以不同无敌步数到达(取首次到达)
测试点设计
测试类型输入样例预期输出验证要点
基础样例题目给定示例10标准流程
无解情况全图被陷阱包围-1终止条件
道具重置多个道具格最短路径全局got标记
无敌传递K=1时连续过陷阱正确步数状态递减逻辑
边界规模N=1000, K=10的大地图不超3s性能验证
优化建议
  1. ​内存压缩​​:

    • 使用short dist[MAXN][MAXN][MAXK](步数<2000)
    • 用位运算压缩got数组(每布尔值占1bit)
  2. ​搜索优化​​:

    • 双向BFS(起点终点同时搜索)
    • 优先扩展靠近终点的状态(A*启发式)
  3. ​常数优化​​:

    • 循环展开(手动展开方向循环)
    • 使用局部变量缓存数组访问

​复杂度分析​​:
时间:O(N²K) ≈ 1000²×11 = 1100万次操作
空间:O(N²K) ≈ 44MB(dist) + 132MB(队列)


文章转载自:

http://OheW3ZXC.prfrb.cn
http://xNrToujy.prfrb.cn
http://JhjacGdN.prfrb.cn
http://EQzmK9He.prfrb.cn
http://y9ruQHYr.prfrb.cn
http://6xrx14sJ.prfrb.cn
http://sb9OWH36.prfrb.cn
http://E6In3Li3.prfrb.cn
http://sEPawXxy.prfrb.cn
http://cRsDQI5g.prfrb.cn
http://Zg6A4LZr.prfrb.cn
http://dEsX3pFk.prfrb.cn
http://coTgFDWR.prfrb.cn
http://PsVs84Xu.prfrb.cn
http://RfqmgUIa.prfrb.cn
http://ddarnSOi.prfrb.cn
http://tvo3Enh5.prfrb.cn
http://LdrKRjf9.prfrb.cn
http://xWI9eRT0.prfrb.cn
http://jzhsed1J.prfrb.cn
http://peuBWAw4.prfrb.cn
http://8jYY2fCT.prfrb.cn
http://x8Dx5IZi.prfrb.cn
http://8A7rMTRK.prfrb.cn
http://R28ds3p0.prfrb.cn
http://RO0oa1Id.prfrb.cn
http://XwWWHOvF.prfrb.cn
http://YIGDIkWa.prfrb.cn
http://jQ1KBqRC.prfrb.cn
http://qSGc6N6x.prfrb.cn
http://www.dtcms.com/wzjs/772721.html

相关文章:

  • 上海企业网站改版数字广东网络建设有限公司招聘
  • 网站建设营销制作设计oppo开放平台
  • 网站建设移交确认书网站服务公司有哪些
  • 开封建网站的公司西安推广公司无网不胜
  • 上海网站建设yuue茶叶市场网站建设方案
  • 海外做淘宝网站wordpress 赢利模式
  • 网站设计的内容建设电影推荐网站的项目背景
  • 如何用域名进网站女孩子做室内设计累吗
  • 苏宁电器网站建设特点分析网站如何管理
  • html旅游网站页面设计模板如何建立一个网站
  • 常州微信网站建设公司做一个属于自己的网页
  • 做淘客网站如何用wordpress建网站
  • 网站建设书籍资料网页网站设计培训
  • 深圳网站建设 营销wordpress极客学院
  • 有什么比较好的画册设计网站正邦设计陈丹
  • 湖南省住房与城乡建设部网站开发区建网站外包
  • 营销型网站建设价格贵吗wordpress主题解压后有多个文件
  • 北京网站开发网络公司郑州网站建设特色
  • 自己做的网站发到网上杭州做兼职网站建设
  • 淘宝代做网站玉树电子商务网站建设公司
  • 长春建站费用中卫网架配件多少钱
  • 网站备案名称更改宝丰网站制作效果好
  • 东莞营销网站建设报价房山企业网站建设公司
  • 山东广饶县建设局网站wordpress如何降级
  • 济南手机建站模板joomla 多语言网站
  • 门户网站啥意思wordpress开启新用户注册功能
  • 网站建设的内容管理免费qq刷赞网站推广
  • 安溪网站建设公司网页设计可以从事什么工作
  • 厚街网站建设费用质量好的购物平台
  • 默认网站预览能能显示建设中车牌照损坏在网站做的能用吗