#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int i=0,j=0,direction=0,k=0,l=0,ix=0,jx=0,mov0=1,mov1=1,mov2=1,mov3=1;
char cl='B';
printf("Enter the size of the maze: ");
scanf("%d %d",&i,&j);
char maze[i][j];
for(l=0;l<j;l++)
{
for(k=0;k<i;k++)
{
maze[k][l]='.';
}
}
i=0;
j=0;
maze[i][j]='A';
//maze[0][0]='A';
srand(time(NULL));
//starts moving through maze
/*for(jx=0;jx<l;jx++)
{
for(ix=0;ix<k;ix++)
{
printf("[%c]",maze[ix][jx]);
}
printf("\n");
}*/
while ((mov0!=1 && mov1!=1 && mov2!=1 && mov3!=1) || (cl!='Z'+1 ) )
{
/*//reset space(positions above 1)
spaces=1;*/
//generates direction
direction=rand()%4;
printf("%c %d\n",cl,direction);
/*for(jx=0;jx<l;jx++)
{
for(ix=0;ix<k;ix++)
{
printf("[%c]",maze[ix][jx]);
}
printf("\n");
}*/
switch(direction)
{
//up
case 0: if((j-1)>0 && maze[i][j-1]=='.' && mov0==1)
{
maze[i][j-1]=cl;
cl++;
j--;
} else {
mov0=0;
break;
}
break;
//down
case 1: if((j+1)<l && (maze[i][j+1]=='.' && mov1==1))
{
maze[i][j+1]=cl;
cl++;
j++;
} else {
mov1=0;
break;
}
break;
//left
case 2: if((i-1)>0 && (maze[i-1][j]=='.' && mov2==1))
{
maze[i-1][j]=cl;
cl++;
i--;
} else {
mov2=0;
break;
}
break;
//right
case 3: if((i+1)<k && (maze[i+1][j]=='.' && mov3==1))
{
maze[i+1][j]=cl;
cl++;
i++;
} else {
mov3=0;
break;
}
break;
}
}
for(j=0;j<l;j++)
{
for(i=0;i<k;i++)
{
printf("[%c]",maze[i][j]);
}
printf("\n");
}
return 0;
}
这段代码应该遍历一个数组,并用字母表中的字母填充每个点,如果没有可用的点,它必须退出并按原样打印数组。 (不能两次去同一个细胞)。
编辑#2:
我也尝试过这种方式:
switch(direction)
{
//up
case 0: if((j-1)>0 && maze[i][j-1]=='.')
{
maze[i][j-1]=cl;
cl++;
j--;
} else if((maze[i+1][j]!='.') && (maze[i-1][j]!='.') && (maze[i][j-1]!='.') && (maze[i][j+1]!='.')){
flag=0;
break;
}
break;
//down
case 1: if((j+1)<l && (maze[i][j+1]=='.'))
{
maze[i][j+1]=cl;
cl++;
j++;
} else if((maze[i+1][j]!='.') && (maze[i-1][j]!='.') && (maze[i][j-1]!='.') && (maze[i][j+1]!='.')){
flag=0;
break;
}
break;
//left
case 2: if((i-1)>0 && (maze[i-1][j]=='.'))
{
maze[i-1][j]=cl;
cl++;
i--;
} else if((maze[i+1][j]!='.') && (maze[i-1][j]!='.') && (maze[i][j-1]!='.') && (maze[i][j+1]!='.')){
flag=0;
break;
}
break;
//right
case 3: if((i+1)<k && (maze[i+1][j]=='.'))
{
maze[i+1][j]=cl;
cl++;
i++;
} else if((maze[i+1][j]!='.') && (maze[i-1][j]!='.') && (maze[i][j-1]!='.') && (maze[i][j+1]!='.')){
flag=0;
break;
}
break;
}
}
flag变量替换所有4个mov#变量。循环时仍未退出。
编辑#3修复了@SomeProgrammerDude指出的内容。仍然没有退出。
答案 0 :(得分:0)
while ((mov0!=1 && mov1!=1 && mov2!=1 && mov3!=1) || (cl!='Z'+1 ) )
应该是
while ((mov0!=1 && mov1!=1 && mov2!=1 && mov3!=1) && (cl!='Z'+1 ) )