题目描述
小麦同学为扫地机器人设计了一个在矩形区域中行走的算法。
规则如下:
采取向右 - 向下 - 向左 - 向上的路径,让扫地机器人清扫一个n*m的面积,每到一个单元格,都为其标记一个整数的到达序号,遍历过所有单元格后,机器人自动停止。
最终输出每个单元格到达的顺序编号。
举例
清扫一个3 * 4的矩形区域
清扫一个5 * 5的矩形区域


输入
一行内有2个两个整数n和m,用空格隔开,分别代表矩形区域的行数(高)和列数(宽)(n和m都是2~9之间的整数)
输出
输出按题意机器人走过每个点之后,标记数字的结果,每个数字输出时场宽设置为3。
样例输入
3 4
样例输出
1 2 3 4
10 11 12 5
9 8 7 6
#include <bits/stdc++.h> using namespace std; int n, m; int a[20][20]; // 定义数组,存储x和y变化的值 int fx[5] = {
0,0,1,0,-1}; int fy[5] = {
0,1,0,-1,0}; // 为二维数组赋值 // 为 x,y 点赋值为 k void fun(int x, int y, int k){
a[x][y] = k; // 赋值 // 优先向右,其次向下,再次向左,再次向上 // 通过循环方向值变化的数组,将x和y变化的值逐个加到x和y上 int tx, ty; // 表示将要去的点 for(int i=1; i<=4; i++){
tx = x + fx[i]; ty = y + fy[i]; // 递归之前先判断,保证要访问的点的有效性 if(tx>=1 && tx<=n && ty>=1 && ty<=m && a[tx][ty]==0){
fun(tx,ty,k+1); } } } int main(){
// n行m列 cin >> n >> m; // 为1,1点赋值为1 fun(1, 1, 1); // 输出 int i, j; for(i = 1; i <= n; i++){
for(j = 1; j <= m; j++){
cout << setw(3) << a[i][j]; } cout << endl; } }
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/56079.html