模仿大佬思路
一各种初始化;
二初始化数组;
三设置可以从’A‘到'Z'的循环(在循坏前设置种子)//用了while
其中要考虑条件:1.是否占位;//在要改变数组时检查是否为字母
2.是否越界;//考虑行列值范围,若满足则下一步,否则continue重开
3.是否堵死 //分二类,一是边角判断3个位置.二是中间判断4个位置 用多种if,末尾用break;
其中(1.2)是还能继续,但是本轮循环不能改变数组,同时要在下一个循环还原行列数值,(3.)是要跳出循环直接END;
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 10
#define S 25
int main(){
char a[N][N];
char ch= 'A';
int i=0;
int z;
int x=0,y=0;
int m=0,n=0;
for(int h=0;h<N;h++){
for(int j=0;j<N;j++){
a[h][j] = '.';
}
}
a[0][0] = ch;
srand((unsigned)time(NULL));
while(i<S){
x = m;
y = n;
z=rand() % 4;
switch(z){
case 0:
y+=1;
break;
case 1:
x-=1;
break;
case 2:
y-=1;
break;
case 3:
x+=1;
break;
}
if(x<0||x>9||y<0||y>9){
continue;}
if(a[x][y] != '.'){
continue;}
m = x;
n = y;
ch++;
a[x][y] = ch ;
if(x>0&&x<9&&y>0&&y<9){
if(a[x-1][y] != '.'&&a[x+1][y] != '.'&&a[x][y-1] != '.'&&a[x][y+1] != '.'){
break;
}
}
if( x == 0 &&a[x+1][y] != '.'&&a[x][y-1] != '.'&&a[x][y+1] != '.' )
{
break;
}
if(x == 9 &&a[x-1][y] != '.'&&a[x][y-1] != '.'&&a[x][y+1] != '.'){
break;
}
if(y == 0 &&a[x-1][y] != '.'&&a[x+1][y] != '.'&&a[x][y+1] != '.'){
break;
}
if( y == 9 &&a[x-1][y] != '.'&&a[x+1][y] != '.'&&a[x][y-1] != '.'){
break;
}
i++;
}
for(int h=0;h<N;h++){
for(int j=0;j<N;j++){
printf("%c",a[h][j]);
}printf("\n");
}
return 0;
}