シミュレーション-蛇行行列ACを達成するためのシミュレーション座標

曲がりくねったマトリックスのタイトルの説明:
ここに画像の説明を挿入座標シミュレーション:dを使用して実行方向を制御します

int d = 1;
int dx[4] = {
    
    -1,0,1,0};
int dy[4] = {
    
    0,1,0,-1};

方向シフト:

  1. 状態:範囲外、データは転送前の場所にすでに保存されています
  2. 方法:条件が満たされたときに方向を再生成します。d=(d + 1)%4;
    for(int i = 1;i <= m * n; i ++){
    
    
        state[x][y]=i;          
        // 满足条件则改变方向
        if((x + dx[d] > n)||(x + dx[d] < 1)||(y + dy[d] > m)||(y + dy[d] < 1)||(state[x+dx[d]][y+dy[d]])){
    
    
            d = (d + 1) % 4;    // 重新生成方向
        }
        x += dx[d];
        y += dy[d];
    }

完全なコード:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;

const int N = 1e4;
int n,m,state[N][N];
int dx[4] = {
    
    -1,0,1,0};
int dy[4] = {
    
    0,1,0,-1};

int main(){
    
    
    cin>>n>>m;
    int d = 1;
    int x = 1, y = 1;
    for(int i = 1;i <= m * n; i ++){
    
    
        state[x][y]=i;              // 开始赋值
        // 满足条件则改变方向
        if((x + dx[d] > n)||(x + dx[d] < 1)||(y + dy[d] > m)||(y + dy[d] < 1)||(state[x+dx[d]][y+dy[d]])){
    
    
            d = (d + 1) % 4;    // 重新生成方向
        }
        x += dx[d];
        y += dy[d];
    }
    // 输出
    for(int i = 1;i <= n; i ++){
    
    
        for(int j = 1; j <= m; j ++)
            cout<<state[i][j]<<' ';
        cout<<endl;
    }
    return 0;
}

おすすめ

転載: blog.csdn.net/weixin_45666249/article/details/114286112