马的遍历(宽搜)代码为什么打错了? - 爱问答

(爱问答)

马的遍历(宽搜)代码为什么打错了?

问题:在n*n的棋盘上有一匹马在第x行第y列的格子上。棋盘上有些格子上有障碍物,马不能达到有障碍物的格子。已知马在棋盘中的走法按“日“字8个方向可走,如下图所示:问:哪些格子能到达,到达这些格子的最小步数是多少。 【输入:】 第一行:n(n<=100),x,y (马的开始位置)。 接下来n行为棋盘的描述:“-“为空格子,”+“表示该格子有障碍物。 【输出:】 n行,每行n个用空格隔开的数,表示马到达该格子的最少步数,如果无法到达则用-1表示。马的遍历(宽搜) 代码为什么打错了?


#include<iostream>

using namespace std;

int front,rear,x1,y1,ans=0,n,a[110][110],x,y,x0,y0,d[10010][3],b[110][110]={0};

string s;

int dx[8]={-2,-2,-1,1,2,2,1,-1},dy[8]={-1,1,2,2,1,-1,-2,-2};

void bfs(int p,int q) {

ans++;

a[p][q]=0;

front=1,rear=2;

d[1][0]=p,d[1][1]=q;

while(front<rear){

x=d[front][0],y=d[front++][1];

for(int i=0;i<8;i++){

x0=x+dx[i],y0=y+dy[i];

if(x0>=0&&x0<n&&y0>=0&&y0<n&&a[x0][y0]==1&&b[x0][y0]==0){

d[rear][0]=x0; d[rear++][1]=y0;

a[x0][y0]=0; b[x0][y0]=b[x][y]+1;

}

}

}

return ;

}  

int main() {

cin>>n>>x1>>y1;

x1--; y1--;

for(int i=0;i<n;i++){

   cin>>s;

    for(int j=0;j<n;j++){

    if(s[j]=='-') a[i][j]=1;

    else a[i][j]=0;

}

}

bfs(x1,y1);

for(int i=0;i<n;i++){

    for(int j=0;j<n;j++){

    if(b[i][j]==0&&i!=x1&&j!=y1) cout<<-1<<" ";

    else cout<<b[i][j]<<" ";

}

cout<<endl;

}

    return 0;  

}


程序没有错啊,可以编译运行且符合例样的,以下是例样要求及程序测试结果

马的遍历(宽搜) 代码为什么打错了?


下一篇:IntelliJIDEA运行java程序需要联网吗

上一篇:在python中使用MySQL数据库时,会因为爬取的两项数据相同而无法存入数据库吗?

热门标签:
excel 网盘 破解 word dll
最新更新:
微软重新评估新的Outlook的使用时机 联想推出搭载联发科Helio G80芯片组的Tab M9平板 英特尔创新大赛时间确定! 微软Edge浏览器在稳定渠道中推出Workspaces功能 英伟达RTX4060TiGPU推出MaxSun动漫主题! 谷歌地图为用户提供了街景服务! GameSir 在T4 Kaleid中推出了一款出色的控制器! 微软开始在Windows 11 中测试其画图应用程序的新深色模式! LG电子推出全球首款无线OLED电视 英伟达人工智能芯片崭露头角! Steam Deck可以玩什么游戏-Steam Deck价格限时优惠 雷蛇推出CobraPro鼠标 Kindle电子阅读器可以访问谷歌商店吗 Windows10如何加入组策略 window10图片查看器怎么没有了?