c语言迷宫小游戏,10乘10大小的迷宫,我拿别人的代码修改的,为什么结果总是显示找不到路径,代码如下

int PathMaze(int maze[ROW][COLUMN])
{
int i,j,k,v,front,rear,x,y,l;
/*声明一个标记数组来记录一个是否到达过某个点,并进行初始化*/
int mark[ROW][COLUMN];
for(i=0;i<ROW;i++)
for(j=0;j<COLUMN;j++)
mark[i][j]=0;
/*初始化入口点*/
StepQ[1].x=0;
StepQ[1].y=0;
StepQ[1].PreStep=0;
front=1;
rear=1; //队列中的位置用front和rear标示位置
mark[1][1]=1;
while(front<=rear)
{
/*以(x,y)为出发点进行搜索 即从开始点(0,0)开始搜索*/
x=StepQ[front].x;
y=StepQ[front].y;
/*搜索(x,y)的8个相邻(i,j)是否可以到达*/
for(v=0;v<8;v++)
{
i=x+move[v].x;
j=y+move[v].y; /*(i,j)为可以到达点,将起入队*/
if((maze[i][j]==0)&&(mark[i][j]==0))
{
rear++;
StepQ[rear].PreStep=front;
StepQ[rear].x=i;
StepQ[rear].y=j;
mark[i][j]=1;
}
/*如果到达出口,则输出路径*/
if((i==ROW-1)&&(j==COLUMN-1))
{
printf("\nThe Path in this maze is: \n\n");
k=rear;
l=0;
/*k==0说明已经到达*/
while(k!=0)
{
tmpStepQ[l++].x=StepQ[k].x;
tmpStepQ[l++].y=StepQ[k].y;
/*找前一点*/
k=StepQ[k].PreStep;
}
/*输出路径*/
while(l>0)
printf("(%d,%d)>",tmpStepQ[--l].x,tmpStepQ[--l].y);
printf("(%d,%d)",tmpStepQ[0].x,tmpStepQ[0].y);
return(1);
}
}
/*从队列中弹出一个点,front指向新的出发点*/
front++;
}
/*队空说明没有路径*/
printf("There is no Path in the maze! \n");
return(0);
}

void CreateMaze(int maze[ROW][COLUMN])
{
int i,j;
for(i=0;i<COLUMN;i++)
{
maze[0][i]=1;
maze[ROW-1][i]=1;
}
for(i=0;i<ROW;i++)
{
maze[i][0]=1;
maze[i][COLUMN-1]=1;
}
maze[1][1]=0;maze[1][2]=0;maze[1][3]=0;maze[1][4]=1;maze[1][5]=0;maze[1][6]=0;maze[1][7]=0;maze[1][8]=1;
maze[2][1]=1;maze[2][2]=0;maze[2][3]=0;maze[2][4]=1;maze[2][5]=1;maze[2][6]=0;maze[2][7]=1;maze[2][8]=0;
maze[3][1]=0;maze[3][2]=1;maze[3][3]=1;maze[3][4]=0;maze[3][5]=0;maze[3][6]=1;maze[3][7]=0;maze[3][8]=0;
maze[4][1]=1;maze[4][2]=0;maze[4][3]=0;maze[4][4]=1;maze[4][5]=0;maze[4][6]=0;maze[4][7]=1;maze[4][8]=1;
maze[5][1]=0;maze[5][2]=1;maze[5][3]=0;maze[5][4]=0;maze[5][5]=1;maze[5][6]=0;maze[5][7]=0;maze[5][8]=0;
maze[6][1]=0;maze[6][2]=0;maze[6][3]=1;maze[6][4]=0;maze[6][5]=0;maze[6][6]=0;maze[6][7]=1;maze[6][8]=0;
maze[7][1]=1;maze[7][2]=1;maze[7][3]=0;maze[7][4]=0;maze[7][5]=1;maze[7][6]=1;maze[7][7]=0;maze[7][8]=1;
maze[8][1]=0;maze[8][2]=0;maze[8][3]=1;maze[8][4]=0;maze[8][5]=0;maze[8][6]=0;maze[8][7]=1;maze[8][8]=0;
maze[0][0]=0;maze[9][9]=0;
for(i=0;i<ROW;i++)
{
printf("\n ");
for(j=0;j<COLUMN;j++)
printf("%2d",maze[i][j]);
}
}

这个代码太多,明显是不会看的节奏,但是我可以给出我的一个简化的方案或者说是一个思路

 

首先这明显是个搜索题:

    我到了一个迷宫的一个点 它有上下左右四个方向可以去走吧,

    所以简便方法 ::先定义int x[4] ={0, 0, -1, +1};

                                             int y[4]={1, -1, 0, 0};

    我走迷宫肯定要标记的吧,不然我来回走不是永远也走不玩么;

         所以我定义一个数组       int is_walk_by[row][colum];

   3.然后我开始走了

         

        bool zoulu( int a, int b){

        //判断走对了的方法,再来个剪枝

        主体

            for( int i=0;i<4;i++){

           xx= a+x[i];

            yy= b+x[i];

            mark[xx][yy]=1;//假设已经走过

            if(zoulu(xx, yy)){

                    return true;

            }

            else {

                mark[xx][yy]=0;//还原

                return false;

            }

 

}

//这好像是个递归深搜的方法,看看对你有没有用吧,没用当我没说

温馨提示:答案为网友推荐,仅供参考