CSU - 1726 你经历过绝望吗?两次!(优先队列BFS)

题目大意:题目戳我

     翻译过来就是“猪坚强”走出去,但是经过“."时不需要花费步数,而经过“*”需要花费一步,“#”表示障碍。

题目思路:

     因为步数不一样,考虑用优先队列来保存经过的步数,每次步数小的先出队;

收获:

     在结构体里重载优先队列的运算符时,只能对"<"号进行重载,不然会报错;

struct COO
{
     int x,y;
     int num;
     friend bool operator<(COO a,COO b)
     {
          return a.num>b.num;
     }//步数少的优先
}start,nxt,mid;

   如果想要步数大的优先出来:

struct COO
{
     int x,y;
     int num;
     friend bool operator<(COO a,COO b)
     {
          return a.num

题目代码:

#include
#include
#include
#include
#define maxn 105

using namespace std;

int dx[4]={1,0,-1,0};
int dy[4]={0,-1,0,1};
int vis[maxn][maxn];
struct COO
{
     int x,y;
     int num;
     friend bool operator<(COO a,COO b)
     {
          return a.num>b.num;
     }//步数少的优先
}start,nxt,mid;
priority_queueq;

int main(void)
{
     int t,m,n;
     char ch[maxn][maxn];
     int a,b;
     int flag;
     scanf("%d",&t);
     while(t--)
     {
          while(!q.empty())
               q.pop();
          flag=1;
          memset(vis,0,sizeof(vis));
          memset(ch,0,sizeof(ch));
          //初始化
          scanf("%d%d",&n,&m);
          for(int i=0;i=0&&nx=0&&ny

呼呼

你可能感兴趣的:(BFS)