A70673 | 快乐的马里奥
来源编程题
时间限制1s
内存限制128MB
通过 / 提交0/0
题目描述
马里奥是一个快乐的油漆工人,这天他接到了一个油漆任务,要求马里奥把一个 n 行 m 列的矩阵每一格都用油漆标记一个数字,标记的顺序按照广度优先搜索的方式进行,也就是他会按照如下方式标记:
1、首先标记第 1 行第 1 列的单元格,标记数字为 1 ;
2、然后标记当前单元格上下左右四个方向所有能标记的单元格,且:
① 标记顺序按照:右、下、左、上的优先级;
② 不能标记到矩阵外,且标记过的数字不能重复标记;
3、当本单元格标记结束,寻找比本单元格中数字大 1 的单元格,标记那个单元格的上下左右四个方向,也是按照步骤 2 所示的要求进行标记。
依次类推,直到所有单元格都被标记。
比如:如果有一个 3 \times 3 的矩阵如下,那么首先标记 1,1 单元格,并按照上面步骤 2 的要求标记其四周能够标记的单元格,标记结果如下:

接下来,标记比 1,1 格大 1 的数字的四周的单元格,也就是标记值为 2 的单元格四周的单元格,标记结果如下:

接下来标记值为 3 的单元格四周的单元格,标记结果如下:

接下来标记值为 4 的单元格四周的单元格,标记结果如下:

接下来标记值为 5 的单元格四周的单元格,标记结果如下:

接下来标记值为 6 的单元格四周的单元格,但这个数字四周的单元格已经被标记,因此继续标记值为 7 四周的单元格,标记结果如下:

此时,发现标记结束,得到如上图所示的标记结果。
输入格式
两个整数 n 和 m (2 < n,m ≤ 100)。
输出格式
输出 n 行 m 列的标记后的矩阵,输出每个数后空一格。
输入输出样例
输入 #1
3 3
输出 #1
1 2 4 3 5 7 6 8 9
思路
「快乐的马里奥」用广度优先搜索求最少步:队列分层扩展。
步骤
1. 读入地图或状态。
2. 起点入队,BFS 扩展未访问邻居。
3. 到达终点时输出步数。
C++ 编辑器
输入
输出
可保存默认模板;新题优先使用已保存模板。
当前快捷键仅展示,暂不支持修改。
- 撤销
Ctrl / ⌘ + Z - 重做
Ctrl / ⌘ + Y - 查找
Ctrl / ⌘ + F - 全选
Ctrl / ⌘ + A - 复制
Ctrl / ⌘ + C - 剪切
Ctrl / ⌘ + X - 粘贴
Ctrl / ⌘ + V - 自动排版
工具栏排版按钮 - 草稿保存
编辑时自动保存到本机
历史
提交记录
状态说明时间源码
AI
作答助手
你好,我是作答助手。可以问思路、复杂度、样例含义或代码报错原因;不会直接给出完整 AC 代码。
确定要清空代码吗?