生成一种贯穿10*10字符数组的“随机步法”。程序必须随机的从一个元素走到另一个元素,每次都向上,向下,向左,或者向右移动一个元素的位置。已访问过的元素按顺序用字母A-Z来标记。如果四个方向都堵住了,程序就终止了。
#include <stdio.h>
#include <Windows.h>
#include <time.h>
int x,y;
int main(void) {
//this_x this_y 当前坐标
//direction 行走方向 0,1,2,3 上右下左
//flag 行走成功标记 flag_up_fail等为对应方向行走失败标记
int this_x=0,this_y=0,direction,flag,flag_up_fail,flag_right_fail,flag_down_fail,flag_left_fail;
//定义字符ch,矩阵数组arr
char ch, arr[10][10];
int print_info(char arr[10][10]);
//初始化矩阵arr
//for(x=0;x<10;x++)
// for(y=0;y<10;y++)
// arr[x][y]='.';
memset(arr,'.',sizeof(arr));
//arr[this_x][this_y] = 'A';//从坐标0,0开始 如果从A开始 则注释下面三行 for从ch='B'开始
//或者行走前随机选择起始坐标点。
srand((unsigned)time(NULL));
this_x = rand() % 10;
this_y = rand() % 10;
for(ch='A';ch<='Z';ch++) { //希望从A走到Z
srand((unsigned)time(NULL)+ch);//每走一步后重新生成随机数种子
//每走一步后重置所有成功和失败标记
flag = 0;
flag_up_fail=0,flag_right_fail=0,flag_down_fail=0,flag_left_fail=0;
//开始随机'向下一方向行走'
while(1) {
//获得随机方向0~3
direction = rand()%4;
switch(direction) {
case 0 : //向上
//判断 如果将要行走的方向未越界 且 是未走过的 则
//将当前ch走向此方向,坐标更新,成功标记。
if((this_y-1)>=0 && arr[this_x][this_y-1]=='.') {
this_y -=1;
arr[this_x][this_y] = ch;
flag=1;
printf("行走成功,ch:%c,方向:%d\n",ch,direction);
} else {
//此方向不可走 标记失败
flag_up_fail=1;
}
break;//跳出switch
case 1 : //向右
if((this_x+1)<=9 && arr[this_x+1][this_y]=='.'){
this_x +=1;
arr[this_x][this_y] = ch;
flag=1;
printf("行走成功,ch:%c,方向:%d\n",ch,direction);
} else {
flag_right_fail=1;
}
break;
case 2 : //向下
if((this_y+1)<=9 && arr[this_x][this_y+1]=='.'){
this_y +=1;
arr[this_x][this_y] = ch;
flag=1;
printf("行走成功,ch:%c,方向:%d\n",ch,direction);
} else {
flag_down_fail=1;
}
break;
case 3 : //向左
if((this_x-1)>=0 && arr[this_x-1][this_y]=='.'){
this_x -=1;
arr[this_x][this_y] = ch;
flag=1;
printf("行走成功,ch:%c,方向:%d\n",ch,direction);
} else {
flag_left_fail=1;
}
break;
}
//循环多次后 判断是否所有的方向都标记失败。
if(flag_up_fail==1 && flag_right_fail==1 && flag_down_fail==1 && flag_left_fail==1) {
return print_info(arr);
}
if(flag==1)break;//行走成功 跳出"行走while"循环 开始下一步for行走
}
}
return print_info(arr);
}
/*打印矩阵、退出*/
int print_info(char arr[10][10]) {
printf("\n");
for(y=0;y<10;y++) {
for(x=0;x<10;x++) {
printf("%c ",arr[x][y]);
}
printf("\n");
}
system("pause");
return 0;
}
转载于 http://www.zh30.com/c-language-array-of-exercises-random-footwork