这是我对这个问题的代码:
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#define N 10
int main()
{
int i,move,move_count,row,col;
char ch = 'A',a[N][N];
for(row = 0; row < N; row++)
for(col = 0; col < N; col++)
a[row][col] = '.';
srand(time(NULL));
row = rand()%10;
col = rand()%10;
a[row][col] = ch;
for(i = 0; i < 26; i++)
{
move = rand() % 4;
move_count = 0;
if(move == 0 && move_count < 4) //down
{
if(row+1 < 10 && a[row+1][col] == '.')
{
ch = ch + 1;
a[row+1][col] = ch;
row += 1;
}
else
{
move = 2;
move_count++;
}
}
if(move == 2 && move_count < 4) //up
{
if(row-1 > 0 && a[row - 1][col] == '.')
{
ch = ch + 1;
a[row-1][col] = ch;
row -= 1;
}
else
{
move = 1;
move_count++;
}
}
if(move == 1 && move_count < 4) //left
{
if(col-1 > 0 && a[row][col-1] =='.')
{
ch = ch + 1;
a[row][col-1] = ch;
col -= 1;
}
else
{
move = 3;
move_count++;
}
}
if(move == 3 && move_count < 4) //right
{
if(col+1 < 10 && a[row][col+1] == '.')
{
ch = ch + 1;
a[row][col+1] = ch;
col += 1;
}
else
{
move = 0;
move_count++;
}
}
if(move_count == 4)
break;
}
for(row = 0; row < N; row++)
{
for(col = 0; col < N; col++)
printf("%c",a[row][col]);
printf("\n");
}
getch();
}
在执行时,有时它会在不违反条件的情况下提前终止。这(b)
是提前终止的一些截图;
在第一个 o/p 中可以很容易地看到,它终止于,V
而在第二个它终止于Y
,尽管在这两种情况下都可以进一步移动。知道如何摆脱这个吗?
已编辑
经过我的不懈努力,我已经更正了这段代码(是的,没有使用内部循环!)。感谢 Thomas Padron-McCarthy
&Ilmari Karonen
提供建议。
编辑代码:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define N 10
int main()
{
int i,move,move_count,row,col,seed=4;
char ch = 'A',a[N][N];
for(row = 0; row < N; row++)
for(col = 0; col < N; col++)
a[row][col] = '.';
srand((unsigned)seed);
//srand(time(NULL));
row = 0;//rand()%10;
col = 0;//rand()%10;
a[row][col] = ch;
for(i = 0; i < 26;)
{
move = rand() % 4;
if(move == 0) //down
{
if(row+1 < N && a[row+1][col] == '.')
{
a[++row][col] = ++ch;
i++;
}
}
else if(move == 2) //up
{
if(row-1 >= 0 && a[row - 1][col] == '.')
{
a[--row][col] = ++ch;
i++;
}
}
else if(move == 1) //left
{
if(col-1 >= 0 && a[row][col-1] =='.')
{
a[row][--col] = ++ch;
i++;
}
}
else if(move == 3) //right
{
if(col+1 < N && a[row][col+1] == '.')
{
a[row][++col] = ++ch;
i++;
}
}
if((a[row+1][col]!='.'||row==9) && (a[row - 1][col]!='.'||row==0) &&
(a[row][col-1]!='.'||col==0 )&& (a[row][col+1]!='.'||col==9) || i==25)
break;
}
for(row = 0; row < N; row++)
{
for(col = 0; col < N; col++)
printf("%c ",a[row][col]);
printf("\n");
}
return 0;
}