[Tolik and His Uncle]

· · 题解

原题

思路

先把问题简化,变成遍历一个 1 \times m 的棋盘,很明显,遍历的方式即为 1 , m , 2 , m - 1 \dots

可以把这种遍历方法应用到二维,具体来说,每次选取第 i 行和第 n - i + 1 行,遍历 (i , 1) , (n - i + 1 , m) ,(i , 2) , (n - i + 1 , m - 1) \dots,如下图:

代码

#include <bits/stdc++.h>
using namespace std;
int n , m;
int main()
{
    cin >> n >> m;
    for (int i = 1 , j = n ; i <= j ; i++ , j--)
        for (int k = 1 , l = m ; (i == j ? k <= l : k <= m && l >= 1)/*防止重复输出*/ ; k++ , l--) 
        {
            cout << i << ' ' << k << '\n';
            if (i != j || k != l) cout << j << ' ' << l << '\n';//防止重复输出
        }
    return 0;
}