20分BFS求助
  • 板块P1443 马的遍历
  • 楼主cagur
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/11/30 19:09
  • 上次更新2023/10/27 00:54:40
查看原帖
20分BFS求助
815490
cagur楼主2022/11/30 19:09

代码如下,只过了两个测试点,哪位大佬能解答一下emmm

#include <bits/stdc++.h>
using namespace std;
//pair表示状态
const int INF = -1;
typedef pair<int,int> P;
#define MAX_N 401
#define MAX_M 401
//输入
int N,M;
int sx,sy;//起点
int d[MAX_N][MAX_M];//最短距离
bool flag[MAX_N][MAX_M];
int dx[8] = {-1,-2,-2,-1,1,2,2,1};
int dy[8]  = {2,1,-1,-2,2,1,-1,-2};
void bfs(){
    queue<P>que;
    que.push(P(sx,sy));
    d[sx][sy]  = 0;
    flag[sx][sy] = true;
    while(que.size()){
        P p = que.front();
        que.pop();
        for(int i=1;i<=8;i++){
            int nx = p.first+dx[i];
            int ny = p.second + dy[i];
            if(nx>0 && nx <=N && ny>0 && ny<=M  && !flag[nx][ny]){
                que.push(P(nx,ny));
                d[nx][ny] = d[p.first][p.second]+1;
                flag[nx][ny] = true;
            }
        }
    } 
}
void solve(){
    bfs();
    for(int i=1;i<=N;i++){
        for(int j=1;j<=M;j++){
            printf("%-5d",d[i][j]);
        }
        cout << endl;
    }
}
int main(){
    cin >> N >> M;
    memset(d,-1,sizeof(d));
    memset(flag,false,sizeof(flag));
    cin >> sx >> sy;
    solve();
}
2022/11/30 19:09
加载中...