迷宫BFS+递归回溯找爹打印路径

来源:互联网 发布:管家婆普及版数据恢复 编辑:程序博客网 时间:2024/06/05 15:09
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include<queue>
using namespace std;


int ok=0;
int k;
int f[10][10];






struct node   
{
int x,y;
};    
node trackk[50][50];
  


queue <node> qq;
node point,father;




bool cmp(int a,int b) 
{    
return (a>b);
}


int legal(int r, int c)
{

if ( r>=1 && r<=5 && c>=1 && c<=5 && f[r][c]==0) 
return 1;
return 0;
}




void bfs()
{
while ( !qq.empty() )
{

father=point=qq.front();
//printf("%d, %d\n",point.x,point.y);
if (point.x==5 && point.y==5) { return;    }

f[point.x][point.y]=1;
if ( legal(point.x-1,point.y)  )  
{point.x--; qq.push(point);trackk[point.x][point.y]=father; //要输出位置X,Y 但是在位置x,y保存了他的父亲,用来回溯
 point.x++;}
if ( legal(point.x+1,point.y)  ) 
{point.x++; qq.push(point); trackk[point.x][point.y]=father; point.x--;}
if ( legal(point.x,point.y-1)  )  
{point.y--; qq.push(point); trackk[point.x][point.y]=father; point.y++;} 
if ( legal(point.x,point.y+1)  ) 
{point.y++; qq.push(point); trackk[point.x][point.y]=father; point.y--;}
qq.pop();


}
return ;


}


void output(node  a)
{
if (a.x==1&&a.y==1) printf("(0, 0)\n");
else 
{
output(trackk[a.x][a.y]);
printf("(%d, %d)\n",a.x-1,a.y-1);
}
}
int main()
{



int i,j;


for (i=1;i<=5;i++)
{
for (j=1;j<=5;j++)
{
scanf("%d",&f[i][j]);
}
}

f[1][1]=1;
point.x=point.y=1;
qq.push(point);
bfs();
node a;
a.x=a.y=5;
output(a);




return 0;
}
0 0