队列求迷宫问题

来源:互联网 发布:vb 判断文件是否存在 编辑:程序博客网 时间:2024/05/22 10:35

 队列求迷宫问题 

/*Name: 队列求迷宫问题 Copyright: Author: Date: 14/04/17 15:05Description: 希望以后能参考的*/#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;}

原创粉丝点击