题目描述
输出蛇形矩阵
样例
输入: 3 3
输出: 1 2 3
8 9 4
7 6 5
#include <iostream>
using namespace std;
int q[110][110];
int main(){
int dx[] = {0 , 1 , 0 , -1},dy[] = {1 , 0 , -1 , 0 }; //设置向量数组,顺序是右下左上
int n , m; //n,m是矩阵行数与列数
int x = 0 , y = 0; //x,y当前坐标
int d = 0; //向量数组当前位置
cin >> n >> m;
for(int i = 1;i <= n*m; i++ ){
q[x][y] = i; //首先对数组进行赋值,循环一次赋值一次
//以下为数组移动逻辑,整体逻辑是依次对n*m元素赋值,同时选择合适位置
x += dx[d];
y += dy[d]; //对数组移动
if (x < 0 || y < 0 || x >= n || y >= m || q[x][y]){
x -= dx[d];
y -= dy[d];//如果越界或者到达已访问的位置退回原位置
d = (d + 1) % 4; //转向
x += dx[d];
y += dy[d]; //找到合适位置
}
}
//数组按行遍历,n是行数
for(int i = 0; i < n; i++){
for(int j = 0; j < m ; j++){
printf("%d ",q[i][j]);
}
printf("\n");
}
}