题目是:编写程序,生成一种贯穿10*10字符数组(初始时全为字符 ‘.’ )的“随机步法”。程序必须随机地从一个元素“走到”另一个元素,每次都上下、向左或向右移动一个元素位置。已访问过的元素按访问顺序用字母A到Z进行标记。
#include
#include
#include
#define N 10
main()
{
char m[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
char a[N][N]={0};
int i=0;
int j=0;
int n;
int k=1;
int count=0;
a[0][0]=m[0];
while(k<26)
{
srand((unsigned)time(NULL));
n=rand()%4;
switch(n)
{
case 0:
if(a[i-1][j]==0 && i-1>=0)
{
i=i-1;
a[i][j]=m[k];
k++;
count=0;
}
else if (a[i-1][j]!=0)
{
count++;
}
break;
case 1:
if(a[i+1][j]==0 && i+1<10)
{
i=i+1;
a[i][j]=m[k];
k++;
count=0;
}
else if(a[i+1][j]!=0)
{
count++;
}
break;
case 2:
if(a[i][j-1]==0 && j-1>=0)
{
j=j-1;
a[i][j]=m[k];
k++;
count=0;
}
else if(a[i][j-1]!=0)
{
count++;
}
break;
case 3:
if(a[i][j+1]==0 && j+1<10)
{
j=j+1;
a[i][j]=m[k];
k++;
count=0;
}
else if(a[i][j+1]!=0)
{
count++;
}
break;
}
if(count==4)
break;
}
for(i=0;i<10;i++)
{
for (j=0;j<10;j++)
{
if(a[i][j]==0)
a[i][j]='.';
printf("%2c",a[i][j]);
}
printf("\n");
}
}
输出结果只有单排或者单列的A~J
求问如何解决,谢谢。