#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 10 //定義地圖 10*10
#define NUM_direction 4 // 4個方向
#define TRUE 1
#define FALSE 0
void answer();
int Is_over(int i, int j); //越界判斷
void move(int * i, int * j, int direction); //移動
int Test_direction(int a[], int n); //判斷4個方向是否都不通
int main() {
answer();
fflush(stdin);
getchar();
return 0;
}
void answer() {
char all[N][N];
int flag_direction[NUM_direction]={0}; //1表示不通
int cur_i=0,cur_j=0; //cur_i是行,cur_j是列,{0,0}是入口
int pre_i,pre_j;
int cur_direction; //每次隨機產生的方向
char cur_step='A'; //初始步是‘A’
int i,j;
for(i=0;i<N;++i) {
for(j=0;j<N;++j) {
all[i][j]='*';
}
}
all[0][0]=cur_step;
srand((unsigned) time(NULL));
while(Test_direction(flag_direction, NUM_direction) && 'Z'!=cur_step) { //不是最後一步,也不是4個方向都不通
cur_direction= rand()%4;
if(flag_direction[cur_direction]) {
continue;
}
pre_i=cur_i;
pre_j=cur_j;
move(&cur_i,&cur_j,cur_direction); //先走再判斷,如果不合格則後退
if(Is_over(cur_i,cur_j) || '*'!=all[cur_i][cur_j] ) { //是邊界 或者 已經走過
flag_direction[cur_direction]=1; //標識此方向不通
cur_i=pre_i; //後退一步
cur_j=pre_j;
continue;
}
cur_step++; //前進一步
all[cur_i][cur_j]=(char) cur_step;
for(i=0;i<NUM_direction;++i) {
flag_direction[i]=0;
}
}
for(i=0;i<N;++i) {
for(j=0;j<N;++j) {
printf("%c ",all[i][j]);
}
printf("\n");
}
}
int Is_over(int i ,int j) { //是否越界
if(i>=0 && i<N && j>=0 && j<N ) {
return FALSE;
}
else {
return TRUE;
}
}
void move (int * i, int * j, int direction) {
if(0==direction) { //向上
*i=*i -1;
}
else if(2==direction) { //向下
*i=*i +1;
}
else if(1==direction) { //向右
*j=*j+1;
}
else if (3==direction) { //向左
*j=*j-1;
}
}
int Test_direction(int a[], int n) {
int i;
int sum=0;
for(i=0;i<n;++i) {
sum+=a[i];
}
return sum==4 ? FALSE:TRUE;
}
貫穿10*10數組的隨機步
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.