用C语言编写程序:随机步
发布网友
发布时间:2022-04-25 20:52
我来回答
共3个回答
热心网友
时间:2022-06-17 07:30
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
int main()
{
char a[10][10];
int i=0,j=0,lettercount=1,ran=-1;
const char base_letter='A';
/*初始化*/
memset(a,'.',100);
a[0][0]=base_letter;
srand((int)time(0));
///////开始随机选择//////
while(1)
{
ran=((double)rand()/(RAND_MAX+1))*4;//获取随机数
switch(ran)
{
case 0: //向左走
if( (i-1) >= 0)
{
if(a[i-1][j]=='.')
{
a[i-1][j]=base_letter+lettercount;
++lettercount;
i-=1;
}
}
break;
case 1: //向右走
if( (i+1) < 10)
{
if(a[i+1][j]=='.')
{
a[i+1][j]=base_letter+lettercount;
++lettercount;
i+=1;
}
}
break;
case 2: //向上走
if( (j-1) >= 0)
{
if(a[i][j-1]=='.')
{
a[i][j-1]=base_letter+lettercount;
++lettercount;
j-=1;
}
}
break;
case 3: //向下走
if( (j+1) < 10)
{
if(a[i][j+1]=='.')
{
a[i][j+1]=base_letter+lettercount;
++lettercount;
j+=1;
}
}
break;
}
if(lettercount==26)//如果到Z就退出
break;
}
//打印
for(i=0;i<10;++i)
{
for(j=0;j<10;++j)
printf("%c ",a[i][j]);
printf("\n");
}
return 0;
}
现写的
热心网友
时间:2022-06-17 07:31
这是一个典型的八数码问题啊,看看算法你就明白了。望采纳
热心网友
时间:2022-06-17 07:31
//把该程序替换在楼上代码的检测跳出while(1)的条件下!
if(lettercount==26||(a[i+1][j]!='.')&&(a[i-1][j]!='.')&&(a[i][j+1]!='.')&&(a[i][j-1]!='.'))break;//数字尽头结束和封住走过的路。
if((i-1<0)&&(j-1<0)&&(a[i+1][j]!='.')&&(a[i][j+1]!='.'))break; //封左上角
if((i+1>9)&&(j-1<0)&&(a[i+1][j]!='.')&&(a[i][j+1]!='.'))break; //封左下角
if((i-1<0)&&(j+1>9)&&(a[i+1][j]!='.')&&(a[i][j+1]!='.'))break; //封右上角
if((i+1>9)&&(j+1>9)&&(a[i+1][j]!='.')&&(a[i][j+1]!='.'))break; //封右下角
if((i-1<0)&&(a[i+1][j]!='.')&&(a[i][j-1]!='.')&&(a[i][j+1]!='.'))break;//封上边框
if((i+1>9)&&(a[i-1][j]!='.')&&(a[i][j-1]!='.')&&(a[i][j+1]!='.'))break;//封上边框
if((j-1<0)&&(a[i-1][j]!='.')&&(a[i+1][j]!='.')&&(a[i][j+1]!='.'))break;//封上边框
if((j+1>9)&&(a[i-1][j]!='.')&&(a[i+1][j]!='.')&&(a[i][j-1]!='.'))break;//封上边框
我来替一楼封住所有无限循环的进口!哈哈