我想编写一个打印所有可能的模式的函数,如以下示例所示。在每种情况下,我们都必须从3x3阵列的左上方开始。与解锁手机的模式类似,不同之处在于,该线不能斜着穿过,必须穿过每个盒子。
1--->2--->3 1--->2--->3
| |
v v
8<---7 4 or 6<---5<---4
| ^ | |
v | v v
9 6<---5 7--->8--->9
我首先编写了一个代码,其中[0][0]
被分配为1,然后将2d数组中的其余数字随机化,直到1[0]
或0等于2,依此类推。但是我觉得这使问题变得更加难以解决。
然后尝试使用递归一次又一次地调用makePattern
函数,直到更改数组为止。但是,由于这些代码行,它会将数组中的所有值更改为2:
int value = 2;
array[x][y] = value;
但是,我不怎么循环这个值,以使它随着再次调用该函数而增加。
#include <stdio.h>
#include <stdlib.h>
#define ROW 3
#define COLUMN 3
int makePattern(int array[ROW][COLUMN],int x,int y);
int main(void) {
int x,y;
int count = 2;
int i,j;
int array[ROW][COLUMN] = {
{'1','0','0'},{'0',};
makePattern(array,0);
for (i = 0; i < ROW; i++) {
for (j = 0; j < COLUMN; j++) {
printf("%d",array[i][j]);
}
printf("\n");
}
return 0;
}
int makePattern(int array[ROW][COLUMN],int y) {
int value = 2;
array[x][y] = value;
for (value = 2; value < 9; value++) {
if (x + 1 < ROW && array[x+1][y] == '0') {
makePattern(array,x + 1,y);
}
if (x - 1 >= 0 && array[x - 1][y] == '0') {
makePattern(array,x - 1,y);
}
if (y + 1 < COLUMN && array[x][y + 1] == '0') {
makePattern(array,x,y + 1);
}
if (y - 1 >= 0 && array[x][y - 1] == '0') {
makePattern(array,y - 1);
}
value++;
}
}