【问题标题】:A variation of matrix spiral pattern矩阵螺旋图案的一种变体
【发布时间】:2021-05-18 16:35:36
【问题描述】:

我发现一些非常有趣的任务要做。你必须做一个螺旋图案的变化,看起来像这样 [示例][1] [1]:https://i.stack.imgur.com/nTGDL.png

我尝试以这种方式执行此操作,但它看起来不像我的示例:`

int row = 0, col = 0; 

int boundary = size - 1; 
int sizeLeft = size - 1; 
int flag = 1; 

// Variable to determine the movement 
// r = right, l = left, d = down, u = upper 
char move = 'r'; 

int matrix[size][size]; 

for (int i = 1; i < size * size + 1; i++) { 

    int count = 0;
    if(matrix[row][col+1] == 1){    count++;}
    if(matrix[row][col-1] == 1){    count++;}
    if(matrix[row+1][col] == 1){    count++;}
    if(matrix[row-1][col] == 1){    count++;}
    if(count > 2){ matrix[row][col] = 0; }
    else{ matrix[row][col] = 1; }

    switch (move) { 
        case 'r': 
            col += 1; 
            break; 
        case 'l': 
            col -= 1; 
            break; 
        case 'u': 
            row -= 1; 
            break; 
        case 'd': 
            row += 1; 
            break; 
    } 

    if (i == boundary) { 
        boundary += sizeLeft; 

        if (flag != 2) { 
            flag = 2; 
        } 
        else{ 
            flag = 1; 
            sizeLeft -= 1; 
        } 

        switch (move) { 
            case 'r': 
                move = 'd'; 
                break; 
            case 'd': 
                move = 'l'; 
                break; 
            case 'l': 
                move = 'u'; 
                break; 
            case 'u': 
                move = 'r'; 
                break; 
        } 
    } 
} `

你们知道应该怎么做吗?

【问题讨论】:

    标签: c algorithm


    【解决方案1】:

    有一种更简单的方法。除了第一行 1 之外,请注意每次填充 1 后,下次在该方向填充一行时,另一端的两个元素会变短。基本上,如果你向下移动 5 个,下次你向上移动它将是 3 个,依此类推。这导致以下代码:

    #define size1 9
    #define size2 13
    int matrix[size1][size2] = {0};
    for (int i = 0; i < size2; i++) matrix[0][i] = 1;
    
    int left = 0, up = 0, right = size2, down = size1;
    while ((right > 2) && (down > 2)) {
        if (left == right) break;
        for (int i = up; i < down; i++)    matrix[i][right - 1] = 1;
        up += 2;
        if (up == down) break;
        for (int i = left; i < right; i++) matrix[down - 1 ][i] = 1;
        right -= 2;
        if (left == right) break;
        for (int i = up; i < down; i++)    matrix[i][left]      = 1;
        down -= 2;
        if (up == down) break;
        for (int i = left; i < right; i++) matrix[up][i]        = 1;
        left += 2;
    }
    

    【讨论】:

      猜你喜欢
      • 2022-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多