算法刷题记录:蛇形矩阵

题目链接

https://ac.nowcoder.com/acm/contest/19306/1027

题目分析

画图模拟就完事了,分成了四类
上半部分
1.x在第1行上:x先左再下,直到y等于1。
2.y在第1行上:y先下再上,直到x等于1。
下半部分
3.x在第n行上:x先左再上,直到y等于n。
4.y在第n行上:y先下再左,直到x等于n。

AC代码

#include <iostream>

using namespace std;

int n, cnt;
int w[1005][1005];

int main()
{
    cin >> n;
    int dx = 1, dy = 1;
    w[dx][dy] = ++ cnt;
    // int m = 6;
    while (1)
    {
        if (w[n][n]) break;
        if (dx == 1 && dy != n) 
        {
            w[dx][ ++ dy] = ++ cnt;
            while (dy > 1) w[ ++ dx][ -- dy] = ++ cnt;
        }
        else if (dy == 1 && dx != n)
        {
            w[++ dx][dy] = ++ cnt;
            while (dx > 1) w[ -- dx][ ++ dy] = ++ cnt;
        }
        else if (dx == n)
        {
            w[dx][ ++ dy] = ++ cnt;
            while (dy < n) w[ -- dx][ ++ dy] = ++ cnt;
        }
        else if (dy == n)
        {
            w[ ++ dx][dy] = ++ cnt;
            while (dx < n) w[ ++ dx][ -- dy] = ++ cnt;
        }
    }
    
    for (int i = 1; i <= n; ++ i)
    {
        for (int j = 1; j <= n; ++ j)
            cout << w[i][j] << ' ';
        cout << endl;
    }
}
posted @ 2023-05-28 15:41  想个昵称好难ABCD  阅读(19)  评论(0编辑  收藏  举报