#include <vector>
#include <iostream>
void Print(std::vector<std::vector<int>> arr, int x1, int x2, int y1, int y2, bool flag)
{
if (flag)
{
while (x1 != x2 + 1)
{
std::cout << arr[x1++][y1--] << " ";
}
}
else
{
while (x2 != x1 - 1)
{
std::cout << arr[x2--][y2++] << " ";
}
}
// printf(">>>>>>>>>>>>>>>>>>>>>>.\n");
}
int main(int argc, char *argv[])
{
int row = 0, col = 0;
std::cin >> row >> col;
std::cout << "row: " << row << ", col:" << col << std::endl;
// int arr[row][col] = {{0}};
std::vector<std::vector<int>> arr;
int val = 1;
for (int i = 0; i < row; i++) {
std::vector<int> temp;
for (int j = 0; j < col; j++) {
temp.push_back(val++);
}
arr.emplace_back(temp);
}
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
printf("%3d ", arr[i][j]);
}
std::cout << "\n";
}
int x1 = 0; //(x1,y1)横向走的坐标 (x2,y2)纵向走的坐标
int x2 = 0;
int y1 = 0;
int y2 = 0;
int endrow = row - 1;
int endcol = col - 1;
bool flag = false;
int idx = 0;
int count = row * col;
while (x1 != row)
{
Print(arr, x1, x2, y1, y2, flag);
x1 = y1 == endcol ? x1 + 1 : x1; // 最后一列横坐标加1
y1 = y1 == endcol ? y1 : y1 + 1; // 最后一列纵坐标加1
y2 = x2 == endrow ? y2 + 1 : y2;
x2 = x2 == endrow ? x2 : x2 + 1;
flag = !flag;
}
return 0;
}