队列求迷宫问题

 队列求迷宫问题 

/*
Name: 队列求迷宫问题 
Copyright: 
Author: 
Date: 14/04/17 15:05
Description: 希望以后能参考的
*/
#include<iostream>
#include<stdlib.h>
using namespace std;
typedef struct 
{
int i;
int j;
int pre;
} box;
typedef struct
{
box data[50];
int front,rear;
}student;
int mg[5][5]={//迷宫中0为可走路径,1为障碍
{1,1,1,1,1},
{1,0,1,1,1},
{1,0,0,0,1},
{1,1,1,0,1},
{1,1,1,1,1}};
void print(student q,int front)
{
int k=front,j;
cout<<endl;
do{
j=k;
k=q.data[k].pre;
q.data[j].pre=-1;
}while(k!=0);
cout<<"road is:"<<endl;
k=0;
while(k<50)
{
if(q.data[k].pre==-1)
{
cout<<q.data[k].i<<q.data[k].j<<endl;
}
k++;
}
}
bool mypath(int x0,int y0,int m,int n)
{
    student q;
int x,y,di,find=0;
q.front=q.rear=-1;
q.rear++;
q.data[q.rear].i=x0;q.data[q.rear].j=y0;
q.data[q.rear].pre=-1;mg[x0][y0]=-1;
while(q.rear!=q.front&&!find)
{
q.front++;
x=q.data[q.front].i;
y=q.data[q.front].j;
if(x==m&&y==n)
{
find=1;
 print(q,q.front);
 return true;
     } 
for(di=0;di<4;di++)
{
   switch(di)
   {
case 0:x=q.data[q.front].i;y=q.data[q.front].j-1;break;
case 1:x=q.data[q.front].i+1;y=q.data[q.front].j;break;
case 2:x=q.data[q.front].i;y=q.data[q.front].j+1;break;
case 3:x=q.data[q.front].i-1;y=q.data[q.front].j;break;
}
if(mg[x][y]==0)
{
q.rear++;
q.data[q.rear].i=x;
q.data[q.rear].j=y;
q.data[q.rear].pre=q.front;
mg[x][y]=-1;
}

     }  
} 
return false;
}
int main()
{
if(!mypath(1,1,3,3))
cout<<"wujie";
return 0;
}

    原文作者:迷宫问题
    原文地址: https://blog.csdn.net/ye_se_cong_cong/article/details/73302474
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞