站外题求助
  • 板块学术版
  • 楼主xsmfollower
  • 当前回复5
  • 已保存回复5
  • 发布时间2024/7/1 11:04
  • 上次更新2024/7/1 14:45:50
查看原帖
站外题求助
1308728
xsmfollower楼主2024/7/1 11:04

题目链接

题解说是 BFS,但我的 BFS 如果不加卡时就会死循环,加了就 WA。

是我那里写错了吗?

WA 56 pts 代码:

#include<cstdio>
#include<queue>
#include<cmath>
using namespace std;
const int N=60; char c[N][N]; int dx[5]={0,1,-1,0,0},dy[5]={0,0,0,1,-1};
struct Node { int x,y,s; };
void solve() {
  int h,w,a,xa,ya,b,xb,yb,cnt=0; bool flag=false; scanf("%d %d %d %d %d %d %d %d",&h,&w,&a,&xa,&ya,&b,&xb,&yb);
  for(int i=1;i<=h;i++) for(int j=1;j<=w;j++) scanf(" %c",&c[i][j]);
  if(abs(b-a)%2!=(abs(xa-xb)+abs(ya-yb))%2) return puts("No"),void();
  queue<Node>q; q.push((Node){xa,ya,a});
  while(!q.empty()) {
    Node p=q.front(); q.pop();
    if(!p.s) continue;
    if(p.x==xb&&p.y==yb&&p.s==b) { flag=true; break; }
    cnt++;
    if(cnt>7e6) break;
    for(int i=1;i<=4;i++) {
      int xx=p.x+dx[i],yy=p.y+dy[i];
      if(xx>=1&&xx<=h&&yy>=1&&yy<=w) q.push((Node){xx,yy,p.s+(c[xx][yy]=='*'?1:-1)});
    }
  }
  puts(flag?"Yes":"No");
}
int main() {
  freopen("snowball.in","r",stdin),freopen("snowball.out","w",stdout);
  int t; scanf("%d",&t);
  while(t--) solve();
  return 0;
}
2024/7/1 11:04
加载中...