题目描述
输入两个整数 n 和 m,输出一个 n 行 m 列的矩阵,将数字 1到 n×m 按照回字蛇形填充至矩阵中。
具体矩阵形式可参考样例。
输入格式
输入共一行,包含两个整数 n 和 m。
输出格式
输出满足要求的矩阵。 矩阵占 n 行,每行包含 m个空格隔开的整数。
样例
输入:3 3
输出:
1 2 3
8 9 4
7 6 5
当向右走时,判断条件不仅要为边界(y<m),还需要判断下一个点是否为0(a[x][y+1]==0),
只有当下一个点为0时我们才需要往这个点填上数字
其他路径以此类推。
AC代码
#include <bits/stdc++.h>
using namespace std;
const int N = 105;
int a[N][N];
int ans = 1, x = 1, y = 1;
int main()
{
int n, m;
cin >> n >> m; //n行m列
a[x][y] = ans;
while (ans < n * m)
{
//向右走
while (a[x][y + 1] == 0 && y < m)
{
ans++;
y++;
a[x][y] = ans;
}
//向下走
while (a[x + 1][y] == 0 && x < n)
{
ans++;
x++;
a[x][y] = ans;
}
//向左走
while (a[x][y - 1] == 0 && y > 1)
{
ans++;
y--;
a[x][y] = ans;
}
//向上走
while (a[x - 1][y] == 0 && x > 1)
{
ans++;
x--;
a[x][y] = ans;
}
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
cout << a[i][j] << ' ';
}
cout << endl;
}
return 0;
}