bfs 迷宫打印所有路径 java_迷宫问题bfs+打印路径

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

#define MAX_N 6

const int INF = 0x3f3f3f3f;

int maze[MAX_N][MAX_N];

bool vis[MAX_N][MAX_N];

int d[MAX_N][MAX_N];

struct node

{

int x, y;

};

node pre[MAX_N][MAX_N];

int mov[4][2] =

{

0, 1,

0, -1,

1, 0,

-1, 0

};

void print_ans(node p)

{

vector v;

while(d[p.x][p.y] != 0)

{

v.push_back(p);

p = pre[p.x][p.y];

}

node u;

u.x = 0;

u.y = 0;

v.push_back(u);

for(int i = v.size() -1; i >= 0 ; i--)

{

printf("(%d, %d)\n", v[i].x, v[i].y);

}

return;

}

void bfs(int sx, int sy)

{

memset(d, 1, sizeof(d));

queue que;

vis[sx][sy] = true;

d[sx][sy] = 0;

node u;

u.x = sx;

u.y = sy;

que.push(u);

while(!que.empty())

{

node p = que.front();

que.pop();

if(p.x == 4 && p.y == 4 )

{

print_ans(p);

return;

}

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

{

int nx = p.x + mov[i][0];

int ny = p.y + mov[i][1];

if(!vis[nx][ny] && nx >= 0 && ny >= 0 && nx <= 4 && ny <= 4 && maze[nx][ny] == 0)

{

vis[nx][ny] = true;

pre[nx][ny] = p;

node v;

v.x = nx;

v.y = ny;

que.push(v);

}

}

}

}

int main()

{

for(int i = 0 ; i < 5 ; i++)

{

for(int j = 0 ; j < 5 ; j++)

{

scanf("%d", &maze[i][j]);

}

}

bfs(0, 0);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值