int computerRun(void)//迷宫求解,有解返回1,无解返回0
{
Stack _stack[MaxSize*MaxSize];
int i,j,k,di,find;
int top=1;
_stack[top].x=1;
_stack[top].y=1;
Map[1][1]=-1;//<1,1>为起点
while(top>0)//栈不空,循环
{
i=_stack[top].x;
j=_stack[top].y;
if(i==MaxSize-2&&j==MaxSize-2)//到终点
{
for(k=1;k<=top;k++)//从头开始出栈
{
//printf("\t(%d,%d) ",_stack[k].x,_stack[k].y);
Map[_stack[k].x][_stack[k].y]=-1;//电脑走过的标记为-1
}
return 1;//返回1,有解
}
find=0;
di=0;
while(di<4&&find==0)//四个方向搜索
{
switch(di)
{
case 0:i=_stack[top].x-1;j=_stack[top].y;break;
case 1:i=_stack[top].x;j=_stack[top].y+1;break;
case 2:i=_stack[top].x+1;j=_stack[top].y;break;
case 3:i=_stack[top].x;j=_stack[top].y-1;break;
}
di++;
if(Map[i][j]==0&&i>0&&j>0&&i<MaxSize-1&&j<MaxSize-1)//注意别超出迷宫范围
{
find=1;
}
}
if(find==1)//找到了,压栈
{
top++;
_stack[top].x=i;
_stack[top].y=j;
Map[i][j]=-1; //标记
}
else
{
Map[_stack[top].x][_stack[top].y]=4;//没找到回溯
top--;
}
}
return 0;
}
分享一下