蛇形矩阵题(简单类型)
//抄会系列1.0
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 110;
int n, m; //行 列
int res[N][N];//存放输出结果的二维数组
int status[N][N];//存放位置的占用情况
int main()
{
cin >> n >> m;
int x = 0, y = 0, d = 0;
int dx[] = {0,1,0,-1}; //代表移动方向增减量;例:(0,1)向右
int dy[] = {1,0,-1,0}; //(1,0)向下
//(0,-1)向左
//(-1,0)向上
for (int i = 1; i <= n * m; i++)
{
int nx = x + dx[d];
int my = y + dy[d];
if (nx < 0 || nx >= n || my < 0 || my >= m || status[nx][my])//1.如果移动撞墙,2.当前位置被占用
{
//进行顺时针拐弯
d = (d + 1) % 4;//0, 1,2,3,0 进行循环
//而后再次移动
nx = x + dx[d];
my = y + dy[d];
}
//移动完一次进行赋值;位置置为true
res[x][y] = i;
status[x][y] = true;
//移动赋值
x = nx;
y = my;
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++) cout << res[i][j] << " ";
cout << endl;
}
return 0;
}
执行后