C语言程序设计:现代方法2第九题
还有问题有时会卡住无法输出。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define R 10
#define L 10
#define MAX 4
int main(void){
char arr[R][L];
int m,n,rand_,m_,n_;//将数组想成10x10棋盘m.n为移动到的坐标,m_,n_为记录移动之前的坐标
srand((unsigned) time(NULL));
//将数组赋值成'.'
for(n=0;n<R;++n){
for(m=0;m<L;++m){
arr[n][m] = '.';
};
};
//开始
for(int i = 0;i<26;++i){
//将数组第一行第一列赋值成'A'
if(i == 0){
arr[0][0] = 'A';
m_ = n_ = 0;
}
else{
while(1){
m = m_;
n = n_;
rand_ = rand() % MAX;
switch(rand_){
case 0: --m; break;
case 1: ++m; break;
case 2: --n; break;
case 3: ++n; break;
};
if(m>=0&n>=0&m<10&n<10&arr[m][n] == '.'){
break;
};
};
m_ = m;
n_ = n;
arr[m][n] = 'A' + i;
if(arr[m+1][n]!='.'&arr[m-1][n]!='.'&arr[m][n+1]!='.'&arr[m][n-1]!='.'){
break;
};
};
};
for(int r = 0;r<10;++r){
for(int l = 0;l<10;++l){
putchar(arr[r][l]);
};
printf("\n");
};
}