poj---2312(bfs+优先队列)

#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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值