救救孩子的广搜吧(广搜小白)
  • 板块灌水区
  • 楼主longxiaozhi
  • 当前回复48
  • 已保存回复50
  • 发布时间2024/8/22 09:07
  • 上次更新2024/8/22 11:23:36
查看原帖
救救孩子的广搜吧(广搜小白)
961067
longxiaozhi楼主2024/8/22 09:07

题目描述:马在中国象棋以日字形规则移动,给定n*m大小的棋盘,以及马的初始位置(x,y)和目标位置(s,t),要求不能重复经过棋盘上的同一个点,计算马至少走多少步可以到达目标位置,所有棋盘保证从初始位置到结束位置一定有路径可达。

输入描述:测试数据包含一行,为六个整数,分别为棋盘的大小以及初始位置坐标nmxyst。(1≤x,s≤n≤5,1≤y,t≤m≤5)

输出描述:包含一行,为一个整数,表示马能到达目标位置的最小步数。

样例输入:3 3 1 1 1 3

样例输出:2

代码:

#include<iostream>
#include<queue>
using namespace std;
queue<int> q;
int a[1000][1000];
int mx[10] = {-2,-2,-1,-1,1,1,2,2};
int my[10] = {-1,1,2,-2,2,-2,1,-1};
int n,m,x,y,s,t,k = -1;
void bfs(){
    int x_x,y_y;
    q.push(x);
    q.push(y);
    x_x = q.front();
    q.pop();
    y_y = q.front();
    q.pop();
    k++;
    a[x_x][y_y] = k;
    while(!q.empty()){
        for(int i = 0;i < 8;i++){
            if(a[x_x + mx[i]][y_y + my[i]] == -1){
                a[x_x + mx[i]][y_y + my[i]] = k;
                q.push(x_x + mx[i]);
                q.push(y_y + my[i]);
                if(s == x_x + mx[i] && t == y_y + my[i]){
                    cout<<k;
                    return;
                }
            }
        }
        
    }
}
int main() {
    cin>>n>>m>>x>>y>>s>>t;
    for(int i = 0;i < 1000;i++){
        for(int j = 0;j < 1000;j++){
            a[i][j] = -1;
        }
    }
    return 0;
}
2024/8/22 09:07
加载中...