题目:原题
有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步
输入格式
一行四个数据,棋盘的大小和马的坐标
输出格式
一个n*m的矩阵,代表马到达某个点最少要走几步(左对齐,宽5格,不能到达则输出-1)
输入输出样例
输入 #1
3 3 1 1
输出 #1
0 3 2
3 -1 1
2 1 4
题解思路:
用BFS的思想来求解
代码1 用数组模拟队列
#include<bits/stdc++.h>
using namespace std;
int a[401][401];//记录到达每一个点的步数
bool visit[401][401];//记录当前点是否已经走过
int dx[4]={
1,-1,2,-2};//马行走的策略
int dy[4]={
1,-1,2,-2};
struct node{
int x,y;
}q[160110],node,top;//q是用数组模拟的队列
int n,m;
void bfs(int x,int y){
//a[x][y]=step;
node.x=x;
node.y=y;
visit[x][y]=false;
int front=0,rear=0;
q[rear++]=node;//node入队
while(front!=rear){
top=q[front