前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >P1443 马的遍历

P1443 马的遍历

作者头像
attack
发布2018-04-13 15:35:36
1K0
发布2018-04-13 15:35:36
举报
文章被收录于专栏:数据结构与算法

题目描述

有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步

输入输出格式

输入格式:

一行四个数据,棋盘的大小和马的坐标

输出格式:

一个n*m的矩阵,代表马到达某个点最少要走几步(左对齐,宽5格,不能到达则输出-1)

输入输出样例

输入样例#1:

代码语言:javascript
复制
3 3 1 1

输出样例#1:

代码语言:javascript
复制
0    3    2    
3    -1   1    
2    1    4    
代码语言:javascript
复制
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<queue>
 6 using namespace std;
 7 const int MAXN=501;
 8 int map[MAXN][MAXN];
 9 int n,m,bgx,bgy;
10 int xx[9]={-2,-1,+1,+2,+2,+1,-1,-2};
11 int yy[9]={-1,-2,-2,-1,+1,+2,+2,+1};
12 struct node
13 {
14     int x,y,step;
15 }cur,nxt;
16 void bfs()
17 {
18     cur.x=bgx;cur.y=bgy;cur.step=0;
19     queue<node>q;
20     q.push(cur);
21     while(q.size()!=0)
22     {
23         node p=q.front();
24         q.pop();
25         for(int i=0;i<8;i++)
26         {
27             node nxt;
28             nxt.x=p.x+xx[i];
29             nxt.y=p.y+yy[i];
30             nxt.step=p.step+1;
31             if(nxt.x>=1&&nxt.x<=n&&nxt.y>=1&&nxt.y<=m&&map[nxt.x][nxt.y]==-1)
32             {
33                 map[nxt.x][nxt.y]=nxt.step;
34                 q.push(nxt);
35             }
36         }
37     }
38 }
39 int main()
40 {
41     scanf("%d%d%d%d",&n,&m,&bgx,&bgy);
42     for(int i=1;i<=n;i++)
43         for(int j=1;j<=m;j++)
44             map[i][j]=-1;
45     map[bgx][bgy]=0;
46     bfs();
47     for(int i=1;i<=n;i++)
48     {
49         for(int j=1;j<=m;j++)
50         {
51             printf("%-5d",map[i][j]);
52         }
53         printf("\n");
54     }
55     return 0;
56 }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-05-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
  • 输入输出格式
  • 输入输出样例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档