模拟—模拟坐标实现蛇形矩阵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