题解 | #回型矩阵#

回型矩阵

https://www.nowcoder.com/practice/36d5dfddc22c4f5b88a5b2a9de7db343

//没必要每次改边界大小,题目单纯为二维数组赋值,在边界内部依据右下左上的优先级给二维数组赋值,因此用四个优先级判断能不能赋值,向右无法再继续赋值就换方向向下赋值,依据优先级不断换方向。
//判断该方向是否能赋值:1、在边界内 2、其期望前进方向的下一个位置未被赋值(未被赋值的判断,该数为0)
#include <stdio.h>

int main() {
    int a = 0;
    int arr[19][19] = { 1,0 };//第一个元素为1,其余均为0.
    scanf("%d", &a);
    int max = a * a;
    int i = 0, j = 0;
    int b = 1;//右下左上的顺序移动,一个方向移动不了了换一个方向
    while (b < max) {
        if (0 == arr[i][j + 1] && j < a) {//右
            while (0 == arr[i][j + 1] && j < a-1) {
                j++;
                b++;
                arr[i][j] = b;
            }
        }
        if (0 == arr[i + 1][j] && j < a && i < a) {//下
            while (0 == arr[i + 1][j] && i < a-1) {
                i++;
                b++;
                arr[i][j] = b;
            }
        }
        if (0 == arr[i][j - 1] && j >= 0 && i >= 0) {//左
            while (0 == arr[i][j - 1] && j > 0) {
                b++;
                j--;
                arr[i][j] = b;
            }
        }
        if (0 == arr[i - 1][j] && j >= 0 && i >= 0) {//上
            while (0 == arr[i - 1][j] && i > 0) {
                i--;
                b++;
                arr[i][j] = b;
            }
        }
    }
    for (int x = 0; x < a; x++) {
        for (int y = 0; y < a; y++) {
            printf("%d ", arr[x][y]);
        }
        printf("\n");
    }
    return 0;
}

全部评论

相关推荐

不亏是提前批,神仙打架,鼠鼠不配了
站队站对牛:现在92都报工艺岗了
投递韶音科技等公司8个岗位
点赞 评论 收藏
分享
06-12 17:46
门头沟学院 Java
运营你豪哥:来说重点: ​1.项目前置,时间倒序。​​ 2.​项目描述强化结果与量化效果(STAR原则里的R)。​​ ​3.个人技能精炼,明确掌握程度,突出核心。​​ ​4.增加强有力开头的个人总结部分。​​ 5.​优化教育背景(成绩排名)、合并奖项与活动。​​
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
仁者伍敌:牛子这些人还会点一个自动回复,boss都不带回复的
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-08 13:05
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务