BFS模板(队列实现)

BFS

#define _CRT_SECURE_NO_DEPRECATE
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <vector>
using namespace std;
#define Inf 0x3f3f3f3f
int a[51][51] = { 0 }, book[51][51] = { 0 };
struct node {
	int x;
	int y;
	int step;
};
node que[2501];
int head = 1, tail = 1;
int n, m;
int startX, startY, goalX, goalY;
int main()
{
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			cin >> a[i][j];
		}
	}
	cin >> startX >> startY >> goalX >> goalY;
	int next[4][2] = { {0,1},{1,0},{0,-1},{-1,0} };
	que[1].x = startX;
	que[1].y = startY;
	que[1].step = 0;
	book[startX][startY] = 1;
	tail++;
	int flag = 0;
	while (head < tail) {
		for (int i = 0; i <= 3; i++) {
			int tx = que[head].x + next[i][0];
			int ty = que[head].y + next[i][1];
			if (tx > n || tx < 1 || ty<1 || ty>m)continue;
			if (a[tx][ty] == 0 && book[tx][ty] == 0) {
				book[tx][ty] = 1;
				que[tail].x = tx;
				que[tail].y = ty;
				que[tail].step = que[head].step + 1;
				tail++;
			}
			if (tx == goalX && ty == goalY) {
				flag = 1;
				break;
			}	
		}
		if (flag) break;
		head++;
	}
	cout << que[tail - 1].step << endl;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值