以下是引用wmf2014在2020-3-31 20:44:48的发言:
恭喜楼主!
那我也给出我用递归完成的代码,供楼主参考。只要修改“#define N 10”为“#define N 12”,就可以做12×12:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
int aaaa(char a[][N], int x, int y, char c)
{
int i, j, k;
if (x < 0 || y < 0 || x>N-1 || y>N-1 || a[x][y])return 0; //坐标越界或坐标点上已经有字母则返回0
a[x][y] = c;
if (c == 'Z')return 1; //26个字母全部用完返回1
j = rand() % 4;
for (i = 0; i < 4; i++)
{
k = ((i + j) % 4) * 2 + 1;
if (aaaa(a, x + k % 3 - 1, y + k / 3 - 1, c + 1))return 1; //步进递归
}
return 1; //无路可走返回1
}
void main()
{
int i, j;
char a[N][N] = { 0 };
srand(clock());
aaaa(a, 0, 0, 'A');
for (i = 0; i < N; i++, printf("\n"))
for (j = 0; j < N; j++)
if (a[j])printf("%c", a[j]);
else printf(".");
system("pause");
}
恭喜楼主!
那我也给出我用递归完成的代码,供楼主参考。只要修改“#define N 10”为“#define N 12”,就可以做12×12:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
int aaaa(char a[][N], int x, int y, char c)
{
int i, j, k;
if (x < 0 || y < 0 || x>N-1 || y>N-1 || a[x][y])return 0; //坐标越界或坐标点上已经有字母则返回0
a[x][y] = c;
if (c == 'Z')return 1; //26个字母全部用完返回1
j = rand() % 4;
for (i = 0; i < 4; i++)
{
k = ((i + j) % 4) * 2 + 1;
if (aaaa(a, x + k % 3 - 1, y + k / 3 - 1, c + 1))return 1; //步进递归
}
return 1; //无路可走返回1
}
void main()
{
int i, j;
char a[N][N] = { 0 };
srand(clock());
aaaa(a, 0, 0, 'A');
for (i = 0; i < N; i++, printf("\n"))
for (j = 0; j < N; j++)
if (a[j])printf("%c", a[j]);
else printf(".");
system("pause");
}
有一点值得一提
clock() 返回的是程序运行时间
因为这里在程序刚刚开始的时候 调用 前面基本什么事情都没做
这个返回值大概率是0
这个用法不是一个合适的做法
https://zh.