码迷,mamicode.com
首页 > 其他好文 > 详细

P1443 马的遍历

时间:2019-04-20 21:47:47      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:http   结构体   class   ems   return   style   位置   ace   相关   

题目描述

有一个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    

来源

洛谷:https://www.luogu.org/problemnew/show/P1443

分析

1.这道题是典型的搜索,个人认为BFS更好用,加上STL队列(queue 相关介绍点这里);

2.用一个布尔数组标记地图,每个点只能入队一次,且第一次入队的绝对是最短的;

3.用memset初始数组(棋盘);

上代码

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>    //memset用到
 4 #include<queue>    //STL队列用到
 5 using namespace std;
 6 int nextt[8][2]= {{-1,-2},{-2,-1},{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2}};      //方向
 7 int s[500][500];       //定义棋盘
 8 bool mark[500][500];            //标记棋子
 9 struct node                  //用一个结构体存储当前所在的位置
10 {
11   int x,y,step;
12 };
13 int n,m,sx,sy;
14 int i,j;
15 void bfs(int a,int b)
16 {
17   int k;
18   mark[a][b]=1;               
19   s[a][b]=0;                    //起点设为0
20   queue<node>q;              //定义队列
21   node q1;
22   q1.x=a;
23   q1.y=b;
24   q1.step=0;
25   q.push(q1);                     //起点坐标入队
26   while(!q.empty())      //搜索
27   {
28     node q2=q.front();
29     for(k=0; k<=7; k++)          
30     {
31       int xx=q2.x+nextt[k][0];
32       int yy=q2.y+nextt[k][1];
33       if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&(!mark[xx][yy]))//判断是否出界
34       {
35         node q3;
36         q3.x=xx;
37         q3.y=yy;
38         q3.step=(q2.step+1);
39         q.push(q3);
40         mark[xx][yy]=1;
41         s[xx][yy]=q3.step;
42       }
43     }
44     q.pop();               //重要一步
45   }
46 }
47 int main()
48 {
49   memset(s,-1,sizeof(s));            //棋盘初始化
50   scanf("%d%d%d%d",&n,&m,&sx,&sy);
51   bfs(sx,sy);
52   for(i=1; i<=n; i++)          //输出
53   {
54     for(j=1; j<=m; j++)
55     {
56       printf("%-5d",s[i][j]);           //注意输出格式
57     }
58     printf("\n");
59   }
60   return 0;
61 }

 

P1443 马的遍历

标签:http   结构体   class   ems   return   style   位置   ace   相关   

原文地址:https://www.cnblogs.com/fuxiqi/p/10742646.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!