自学C。刚学到数组,前面只学了选择、循环语句一些最基础的。
遇到了一个编程题:
下面是我尝试的方法
#include<stdio.h>
#include<stdbool.h>
#include<time.h>
#include<stdlib.h>
int main()
{
char maze[10][10] = { 0 };
srand((unsigned)time(NULL));
for (int i = 0; i < 10; i++) {
for (int a = 0; a < 10; a++) {
maze[i][a] = '.';
}
}//初始化表
int step_type = 0;//用来记录走法
int m = 0, n = 0; //记录轨迹
maze[0][0] = 'A';//从左上角开始走
bool check[4] = { false };//用来检查走法是否重复
for (int i = 1; i < 26;) {
do {
step_type = rand() % 4;
} while (check[step_type]); //跳过无效的走法
switch (step_type) {
case 0:
if ((m - 1) >= 0 && maze[m - 1][n] == '.')//向上走不超出表&&上方格子未走过
{
m = m - 1; //向上走。
maze[m][n] = 'A' + i; //留下字母足迹。
i++;
bool check[4] = { 0 }; //清零走法检查
break;
}
else {
check[step_type] = true; //标记此走法无效
if ((check[0] + check[1] + check[2] + check[3]) == 4) {
i = 26; //若上下左右都不可走,提前结束
break;
}
break; //否则再次尝试移动。
}
case 1:
if ((m + 1) <=9 && maze[m + 1][n] == '.') {
m += 1;
maze[m][n] = 'A' + i;
i++;
bool check[4] = { 0 };
break;
}
else {
check[step_type] = true;
if ((check[0] + check[1] + check[2] + check[3]) == 4) {
i = 26;
break;
}
break;
}
case 2:
if ((n - 1) >= 0 && maze[m][n - 1] == '.') {
n -= 1;
maze[m][n] = 'A' + i;
i++;
bool check[4] = { 0 };
break;
}
else {
check[step_type] = true;
if ((check[0] + check[1] + check[2] + check[3]) == 4) {
i = 26;
break;
}
break;
}
case 3:
if ((n + 1) <= 9 && maze[m][n + 1] == '.') {
n += 1;
maze[m][n] = 'A' + i;
i++;
bool check[4] = { 0 };
break;
}
else {
check[step_type] = true;
if ((check[0] + check[1] + check[2] + check[3]) == 4) {
i = 26;
break;
}
break;
}
}
}
for (int i = 0; i < 10; i++) {
for (int a = 0; a < 10; a++) {
printf("%c ", maze[i][a]);
}
printf("\n");
}//打印轨迹表格
return 0;
}
** 运行结果及报错内容**
很明显这个程序失败了
我想知道哪里出了问题,希望您能详细一些解答,感激不尽。