rrc12345 2022-03-20 10:04 采纳率: 83.3%
浏览 7
已结题

关于一道bfs模板题的问题,如何解决?

问题遇到的现象和发生背景

bfs题,但总是莫名其妙的WA
题目大意:
先输入一个整数q(测试样例的数量)
接下来每个样例包括三行:
第一行,一个整数l(4<=l<=300)表示棋盘大小为l*l;
第二行,两个整数startx,starty,表示棋盘上骑士开始时的坐标;
第三行,两个整数endx,endy,表示棋盘上的目标坐标。
问骑士最少几步走到目标坐标,每个输出占一行。若开始坐标等于结束坐标,输出0。
注:骑士的走法如下图所示:

img

样例输入:
3
8
0 0
7 0
100
0 0
30 50
10
1 1
1 1
样例输出:
5
28
0

问题相关代码,请勿粘贴截图
#include<iostream>
using namespace std;
// flag表示是否搜到,head和tail用于处理队列
int startx,starty,l,endx,endy,tx,ty,flag,head=0,tail=0;
int dir[8][2]={{1,2},{-1,2},{1,-2},{-1,-2},{2,1},{-2,1},{2,-1},{-2,-1}};
int book[501][501]={}; // 标记已搜过的点
struct node{
    int x,y,step;
}que[25001];
// 下面是广搜代码
void bfs(){
    flag=0;
    for(int i=0;i<501;i++){
        for(int j=0;j<501;j++){
            book[i][j]=0;
        }
    }
    for(int i=0;i<25001;i++){
        que[i].x=0;
        que[i].y=0;
        que[i].step=0;
    }
    head=0;
    tail=0;
    que[tail].x=startx;
    que[tail].y=starty;
    que[tail].step=0;
    book[startx][starty]=1;
    tail++;
    while(head<tail){
        for(int i=0;i<8;i++){
            tx=que[head].x+dir[i][0];
            ty=que[head].y+dir[i][1];
            if(tx>=0&&tx<l&&ty>=0&&ty<l&&book[tx][ty]==0){
                que[tail].x=tx;
                que[tail].y=ty;
                que[tail].step=que[head].step+1;
                book[tx][ty]=1;
                tail++;
                if(tx==endx&&ty==endy){
                    flag=1;
                    break;
                }
            }
        }
        if(flag){
            break;
        }
        head++;
    }
}
int main(){
    int q;
    cin>>q;
    while(q--){
        cin>>l>>startx>>starty>>endx>>endy;
        if(startx==endx&&starty==endy){
            cout<<0<<endl;
            continue;
        }
        bfs();
        if(!flag){
            cout<<0<<endl;
            continue;
        }
        cout<<que[tail-1].step<<endl;
    }
    return 0;
}

运行结果及报错内容

WA(连续三次都这样)

我的解答思路和尝试过的方法

如上代码,试了几次都不行

我想要达到的结果

得到AC

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 3月28日
    • 创建了问题 3月20日

    悬赏问题

    • ¥200 基于同花顺supermind的量化策略脚本编辑
    • ¥20 Html备忘录页面制作
    • ¥15 黄永刚的晶体塑性子程序中输入的材料参数里的晶体取向参数是什么形式的?
    • ¥20 数学建模来解决我这个问题
    • ¥15 计算机网络ip分片偏移量计算头部是-20还是-40呀
    • ¥15 stc15f2k60s2单片机关于流水灯,时钟,定时器,矩阵键盘等方面的综合问题
    • ¥15 YOLOv8已有一个初步的检测模型,想利用这个模型对新的图片进行自动标注,生成labellmg可以识别的数据,再手动修改。如何操作?
    • ¥30 NIRfast软件使用指导
    • ¥20 matlab仿真问题,求功率谱密度
    • ¥15 求micropython modbus-RTU 从机的代码或库?