《蛇形矩阵》

57 阅读1分钟
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 100;
int a[N][N];
void solve()
{
    int n, m;
    cin >> n >> m;
    int dx[] = {0, 1, 0, -1}, dy[] = {1, 0, -1, 0};
    for (int x = 0, y = 0, d = 0, k = 1; k <= n * m; k ++)
    {
        a[x][y] = k;
        int p = x + dx[d], q = y + dy[d];
        if (p < 0 || p >= n || q < 0 || q >= m || a[p][q])
        {
            d = (d + 1) % 4;
            p = x + dx[d], q = y + dy[d];
        }
        x = p, y = q;
    }
    for (int i = 0; i < n; i ++)
    {
        for (int j = 0; j < m; j ++)
        {
            cout << a[i][j] << '\t';
        }
        cout << endl;
    }
    cout << endl;
    memset(a, 0, sizeof(a));
}
int main()
{
    int t;
    cin >> t;
    while (t --)
    {
        solve();
    }
    return 0;
}