分类: C/C++
2011-11-21 18:05:22
编写一个程序,生成一个贯穿10*10的字符数组(初始时全为字符‘.’)的“随机步法”,程序必须每次从一个元素走到另外一个元素,方向随机为前、后、左、右,元素按照访问顺序用字母A到Z标记,如果其中某个元素前后左右都已经有字母标记,则停止。
下面是我写的程序,思路是用随机数控制方向
#include
#define N 10
#define UP 0
#define DOWN 1
#define LEFT 2
#define RIGHT 3
int main()
{
char a[N][N] = {'0'};
int i, j, dirc;
srand((unsigned)time(NULL));
printf("Program begins:\n");
/**************初始化数组************/
for(i = 0; i < N; i++){
for(j = 0; j < N; j++){
if(i == 0 && j == 0)
a[i][j] = 'A';
else
a[i][j] = '.';
}
}
while(1){
i = 0, j = 0;
dirc = rand() % 4;//产生随机数,0=up,1=down,2=left,3=right
if(dirc == RIGHT && a[i][j+1] == '.'){//处理向右移动的情况
a[i][j + 1] = a[i][j] + 1;
j = j + 1;
}
else if(dirc == LEFT && a[i][j-1] == '.'){//处理向左移动的情况
a[i][j-1] = a[i][j] + 1;
j = j - 1;
}
else if(dirc == UP && a[i-1][j] == '.'){//处理向上移动的情况
a[i-1][j] = a[i][j] + 1;
i = i - 1;
}
else if(dirc == DOWN && a[i+1][j] == '.'){//处理向下移动的情况
a[i+1][j] = a[i][j] + 1;
i = i + 1;
}
if(a[i][j] == 'Z')//若循环到字母Z了,终止
break;
else if(a[i+1][j] != '.' && a[i-1][j] != '.' && a[i][j+1] != '.' && a[i][j-1] != '.')//上下左右都不能走,终止
break;
}
/*********输出结果************/
for(i = 0; i < N; i++){
for(j = 0; j < N; j++){
printf("%c ",a[i][j]);
if(j == 9)
printf("\n");
}
}
}
可是程序在标记到字母B就终止了: ,测试分析了下,觉得是a[i][j]的位置,在每次移动时没有更新,但是看代码的逻辑觉得也没什么问题,请教大家帮忙看看到底是哪里的写法有问题?