zoukankan      html  css  js  c++  java
  • P5731 蛇形方阵题解

    题目传送门

    #include <bits/stdc++.h>
    
    using namespace std;
    const int N = 10;
    int a[N][N];
    
    //右下左上
    int dx[4] = {0, 1, 0, -1};
    int dy[4] = {1, 0, -1, 0};
    
    int main() {
        int n;
        cin >> n;
        int x = 0, y = 0;
        a[0][0] = 1;
        //讲解办法:
        // 先用手画,总结变换方向的条件有哪几个。
        // 再讲解一共要填充1~N*N个数字
        // 最开始是从0,0开始,先向右出发。
        // dx,dy是常见的二维数组处理办法
        int dir = 0; //方向
        for (int i = 2; i <= n * n; i++) {
            while (x + dx[dir] == n //行下不出界
                   || x + dx[dir] < 0  //行上不出界
                   || y + dy[dir] == n //列右不出界
                   || y + dy[dir] < 0  //列左不出界
                   || a[x + dx[dir]][y + dy[dir]] > 0) //如果该位置已有非零数字
            {
                dir = (dir + 1) % 4;
            }
            //找到合理位置
            x += dx[dir], y += dy[dir], a[x][y] = i;
        }
        //输出大吉
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++)
                printf("%3d", a[i][j]);
            printf("
    ");
        }
        return 0;
    }
    
  • 相关阅读:
    1.2 流程控制
    SpringMVC-第一个MVC程序的搭建需要
    用户与权限
    自定义函数和存储过程
    触发器
    事务
    约束
    视图和索引
    函数二
    函数一
  • 原文地址:https://www.cnblogs.com/littlehb/p/15039558.html
Copyright © 2011-2022 走看看