题目:0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0
1代表墙,求左上角到右下角的最短路径 BFS基础题 但是这道题不能用c++自带的queue,要用一维数组手写一个队列,来保留队首退出的元素,结构里定义指针,每个子节点里放着一个指向父节点的指针即可 这道题可以通过队列,加深理解bfs的原理。实际上,图的每一层,也就是新入队的元素的父节点,都是队首退队的那个元素。
#include<iostream>
#include<algorithm>
using namespace std;
int arr[5][5]={
{0,1,0,0,0},{0,1,0,1,0},{0,0,0,0,0},{0,1,1,1,0},{0,0,0,1,0}};
int head=0,tail=0;
int vis[5][5]={0};
struct step{
int x;
int y;
int f;//指向父节点的指针
};
step q[10000];
void bfs(int x,int y,int f){
q[tail].x=x;
q[tail].y=y;
q[tail].f=0;
vis[q[tail].x][q[tail].y]=1;
tail++;
while(1){
step a=q[head];
step ans=a;
if(a.x==4&&a.y==4){
while(1){
cout<<ans.x<<" "<<