【发布时间】:2018-05-22 13:20:06
【问题描述】:
我成功解决了 K.N.国王。
程序运行良好,但有时会进入无限循环。我不明白这背后的原因。
我使用了一个随机函数,它会给出从 0 到 3 的随机值,并且我使用了充分的条件来处理所有四个随机值。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
char walk[10][10];
int direction,currenti=5,currentj=5;
int i,j;
for(i=0; i<10; i++)
{
for(j=0; j<10; j++)
{
walk[i][j]='.';
}
}
srand((unsigned) time(NULL));
for(i=0; i<26;)
{
direction=rand()%4;
printf("%d ",direction);
if(direction==0&&walk[currenti][currentj-1]=='.'&&(currentj-1)>0&&(currentj-1)<10)
{
currentj=currentj-1;
walk[currenti][currentj]='A'+i;
i++;
}
else if(direction==1&&walk[currenti][currentj+1]=='.'&&(currentj+1)>0&&(currentj+1)<10)
{
currentj=currentj+1;
walk[currenti][currentj]='A'+i;
i++;
}
else if(direction==2&&walk[currenti-1][currentj]=='.'&&(currenti-1)>0&&(currenti-1)<10)
{
currenti=currenti-1;
walk[currenti][currentj]='A'+i;
i++;
}
else if(direction==3&&walk[currenti+1][currentj]=='.'&&(currenti+1)>0&&(currenti+1)<10)
{
currenti=currenti+1;
walk[currenti][currentj-1]='A'+i;
i++;
}
}
for(i=0; i<10; i++)
{
for(j=0; j<10; j++)
{
printf("%c ",walk[i][j]);
}
printf("\n");
}
return 0;
}
【问题讨论】:
-
你错过了最后一个 else 部分,它应该处理极端情况。
-
将
i++移出第三个for子句是一个非常糟糕的主意。 -
您是否尝试在每次更改后打印
walk的所有值?如果程序走{上、上、左、左、下、右、上}会发生什么? -
@emmrk 因为我使用了 rand()%4,所以方向的值将取值 (0,1,2,3),我已经为它们设置了所有四个条件...什么你的意思是不使用充分条件?
-
@SouravGhosh 我已经处理了 if 条件本身的极端情况,就像在第一个 if 条件中一样,我已经指定 (currentj-1) 不应超出数组范围,即 0 或 9