随机步法的实现
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <time.h>
int main()
{
int i=0,j=0,dir=0,row=0,col=0,x=0,a=0,b=0;
char alpha='A';
char form[10][10]={'.'};
srand((unsigned) time(NULL));
for ( i = 0; i < 10; i++)
for ( j = 0; j < 10;j++)
form[i][j]='.';
form[row][col]=alpha;
for(;;)
{ //一直循环
if((alpha=='Z')||(x>8))//遇到Z或者随机N次依然无法继续走
{
for ( a = 0; a < 10; a++)
{
for ( b = 0; b < 10;b++)
printf("%c ",form[a][b]);//每个位置打印出来
printf("\n"); //每一行打印后回车
}
return 0; //打印后退出
}
else{ //继续循环
dir=rand() % 4; //产生随机方向 0-左-行-1,1=右,行+1,2=上,列-1,3=下,列+1
switch(dir)
{
case 0:
if(col==0) break; //如果0列,则不能往左,直接跳出
else //不是0列
{
col--; //往左,列-1
if(form[row][col]=='.') //此时的位置是否为空
{ alpha++;form[row][col]=alpha; //为空,将下一个字母放入
x=0;}//计数器清零
else {x++; col++; }//不是空,则退回来,计数器++
break;
}
case 1:
if(col==9) break; //如果9列,则不能往右,直接跳出
else
{
col++; //往左,列-1
if(form[row][col]=='.') //判断此时的列是否为空
{
alpha++;
form[row][col]=alpha; //为空,将下一个字母放入
x=0;}//计数器清零
else {x++; col--;}
break;
}
case 2:
if(row==0) break; //如果0行,则不能往上,直接跳出
else
{
row--; //往左,列-1
if(form[row][col]=='.') //判断此时的列是否为空
{alpha++; form[row][col]=alpha; //为空,将下一个字母放入
x=0;}//计数器清零
else {x++;row++; }
break;
}
case 3:
if(row==9) break; //如果0列,则不能往左,直接跳出
else
{
row++; //往左,列-1
if(form[row][col]=='.') //判断此时的列是否为空
{alpha++;form[row][col]=alpha; //为空,将下一个字母放入
x=0;}//计数器清零
else {x++; row--; }
break;
}
default:;
}
}
}
return 0;
}