P5731 【深基5.习6】蛇形方阵
洛谷
** 题目思路 **
- 设定两个变量X,Y,记录“笔”的坐标。
- 设定一个变量Count记录编号
- 对于这个填数规则就是,从起点开始,一直向右遇到“墙”再向下、同样遇到“墙”再向左….如此循环,右、下、左、上等等等
- 对于本题思路就是按照上面那个规则,向右填数到头、向下填数到头、向左填数
- 通过
x+1 < size && matrix[y][x+1] == 0
判定边界 - 其中:
x+1<size
为了判定越界,注意,每一行(列)的最后一个放到下一个while里填 - 其中
matrix[y][x+1] == 0
判定已经填过的数的区域 - 内部的四个while循环用来完成一圈的填数
- 依据上述的变量循环,完成填数即可
#include<stdio.h>
int matrix[11][11];
void print_matrix(int size);
int main(){
int size;
int x = 0, y = 0;
int count = 1;
scanf("%d",&size);
while(count < size * size){
while( x+1 < size && matrix[y][x+1] == 0) {
matrix[y][x] = count;
x++;count++;
}
while( y+1 < size && matrix[y+1][x] == 0){
matrix[y][x] = count;
y++;count++;
}
while( x-1 >= 0 && matrix[y][x-1] == 0) {
matrix[y][x] = count;
x--;count++;
}
while( y-1 > 0 && matrix[y-1][x] == 0) {
matrix[y][x] = count;
y--;count++;
}
}
matrix[y][x] = count;
print_matrix(size);
return 0;
}
void print_matrix(int size){
int x,y;
for(y=0;y<size;y++){
for(x=0;x<size;x++)
printf("%3d",matrix[y][x]);
printf("\n");
}
}