#include<iostream>
#include<cstdio>
#include<queue>
#include<utility>
#include<cstring>
using namespace std;
int m,z,sx,sy,dx,dy,cnt;
char mp[301][301];
int dir[4][4] = {
{0,1},{0,-1},{1,0},{-1,0}};
bool flag ,v[301][301];
struct Node{
int x,y,step;
friend bool operator<(Node A, Node B){
return A.step > B.step;
}
};
/*
在遇到砖墙的时候,如果在原地射击在走一步,这样相当于step+2.打破了bfs最短路的规则
所以不能用普通队列,要用优先队列,把step小的放在前面
*/
/*
对于优先队列重载运算符的解释:
意思是如果a.step> b.step成立,那么结构体Node a < Node b成立。
由于优先队列是按照从大到小排列,所以结构体b会排列到a之前,然而b.step是最小的,所以实现了按照step的从小到大排序,其实用一句话说就是要想b更大那么b.step.
*/
void bfs(){
priority_queue<Node> q;
Node n;
n.x = sx, n.y = sy,n.step=0;
q.push(n);//存起点
v[sx][sy] = 1;
while(!q.empty()){
Node now = q.top();
q.pop();
if
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交