思路一:
#include#include #include #define N 10 void generate_random(char a[N][N]); void print_array(char a[N][N]); int main() { char walk[N][N] = { 0 }; generate_random(walk); print_array(walk); return 0; } void generate_random(char a[N][N]) { int row, column; for (row = 0;row < N;row++) { for (column = 0;column < N;column++) { a[row][column] = '.'; } } srand((unsigned)time(NULL)); int i = 0, n = 0, b = 0; row = 0;column = 0; a[0][0] = 'A';//a[0][0]作为起点 int c = 'A';//变量c有自增的需要 for (i;i < 25;) { n = rand() % 4; switch (n) { case 0: --row;//多次循环尽量不要用后自增,不易控制 if (row >= 0 && a[row][column] == '.') { a[row][column] = ++c; i++; break; } row++; break; case 1: --column; if (column >= 0 && a[row][column] == '.') { a[row][column] = ++c; i++; break; } ++column; break; case 2: ++row; if (row < N && a[row][column] == '.') { a[row][column] = ++c; i++; break; } --row; break; case 3: ++column; if (column < N && a[row][column] == '.') { a[row][column] = ++c; i++; break; } --column; break; } if (row - 1 < 0 || a[row - 1][column] != '.') { if (column - 1 < 0 || a[row][column - 1] != '.') { if (row + 1 > N - 1 || a[row + 1][column] != '.') { if (column + 1 > N - 1 || a[row][column + 1] != '.') break;//当周围4个点的位置都不满足条件时,break(我认为这样用级联是if语句更容易阅读) } } } } } void print_array(char a[N][N]) { int row, column; for (row = 0;row < N;row++) { for (column = 0;column < N;column++) { printf(" %c", a[row][column]); } printf("n"); } }
思路二:
#include#include #include #define N 10//第三题 void generate_random(char a[N][N]); void print_array(char a[N][N]); int main() { char walk[N][N] = { 0 }; generate_random(walk); print_array(walk); return 0; } void generate_random(char a[N][N]) { int row, column; for (row = 0;row < N;row++) { for (column = 0;column < N;column++) { a[row][column] = '.'; } } srand((unsigned)time(NULL)); int i = 0, n = 0, b = 0; row = 0;column = 0; a[0][0] = 'A';//a[0][0]作为起点 int c = 'A';//变量c有自增的需要 for (i;i < 25;) { b++;//用于检测程序的循环次数 n = rand() % 4; switch (n) { case 0: --row;//多次循环尽量不要用后自增,不易控制 if (row >= 0 && a[row][column] == '.') { a[row][column] = ++c; i++; break; } row++; break; case 1: --column; if (column >= 0 && a[row][column] == '.') { a[row][column] = ++c; i++; break; } ++column; break; case 2: ++row; if (row < N && a[row][column] == '.') { a[row][column] = ++c; i++; break; } --row; break; case 3: ++column; if (column < N && a[row][column] == '.') { a[row][column] = ++c; i++; break; } --column; break; } if (b > 500) break;//完整的一次完成A-Z的循环,只需要循环70次左右,如果超过500次循环仍然没有 }///跳出循环,那么有99.99999....的可能性是路走死了 } void print_array(char a[N][N]) { int row, column; for (row = 0;row < N;row++) { for (column = 0;column < N;column++) { printf(" %c", a[row][column]); } printf("n"); } }



