P1443 马的遍历

3 篇文章 0 订阅

 

 #include <stdio.h>
 #include <string.h>
 #include <math.h>
 #include <stdlib.h>
 #include <iostream>
 #include <bits/stdc++.h>
 using namespace std;
int n,m,qx[100000],f=0,r=0;
int qy[100000];
int a[500][500];
int dx[8]={-1,-2,-2,-1,1,2,2,1};
int dy[8]={2,1,-1,-2,2,1,-1,-2};
void bfs(){

  while(f!=r){
        int x,y;
    for(int i1=0;i1<8;i1++){
        x=qx[f]+dx[i1],y=qy[f]+dy[i1];
        if(x>=0&&x<n&&y>=0&&y<m&&a[x][y]==-1){
            a[x][y]=a[qx[f]][qy[f]]+1;
            qx[r]=x;
            qy[r++]=y;
        }
    }
    f++;
  }
}
int main()
{
    int i,j,sx,sy;
    cin>>n>>m>>sx>>sy;
    sx=sx-1;
    sy=sy-1;
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
            a[i][j]=-1;

    a[sx][sy]=0;
    qx[r]=sx;
    qy[r]=sy;
    r=1;
    bfs();
    for( i=0;i<n;i++){
        for( j=0;j<m;j++)
            cout<<left<<setw(5)<<a[i][j];
            cout<<endl;
    }
    return 0;
}

思路记录:简单的bfs,原本我以为十分钟AC,找bug找了好久,给地图标记的时候出了问题,以后还是得注意点阿!!!!!!!!!!!!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值