c - 矩阵螺旋图案的一种变体
问题描述
我发现一些非常有趣的任务要做。您必须制作螺旋图案的变体,看起来像这样 [示例][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;
}
}
} `
你们知道应该怎么做吗?
解决方案
有一种更简单的方法。除了第一行 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;
}
推荐阅读
- python - 如何在 GridLayout 中添加新小部件而不调整旧小部件的大小?
- python - 使用坐标点生成热图
- rest - 如何编组 springframework.web.multipart.MultipartFile
- sql-server - SQL Server Management Studio v18 命令行参数登录
- firebase - 2 个不同的 Firestore 接口
- gensim - Gensim Word2Vec 缺少输入词的向量
- c++ - 带 SetRange 的 S3Client::GetObject 返回错误数据?
- load-testing - 如何在加特林中设置减速时间?
- ios - 我的 viewcontroller 不属于 viewdidLoad 方法
- python - SQLAlchemy drop_all 不删除表