[LUOGU]P1443 马的遍历
来源:互联网 发布:php是什么 编辑:程序博客网 时间:2024/06/05 07:37
题目描述
有一个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
基础的宽搜,最后注意输出-1的问题..
我的思路是把除了起始点的0都换成-1
不过memset -1也可以
//Writer:GhostCai && His Yellow Duck#include<iostream>#include<cstdio> #include<queue>#define MAXN 405using namespace std;struct point{ int x, y;}node,r;int a[MAXN][MAXN];bool vis[MAXN][MAXN];int m,n,sx,sy;int mx[8]={1,2,2,1,-1,-2,-2,-1};int my[8]={2,1,-1,-2,-2,-1,1,2};void bfs(int x,int y){ node.x = x; node.y = y; queue<point> Q; vis[x][y]=1; a[x][y]=0; Q.push(node); while(!Q.empty() ){ r=Q.front(); Q.pop() ; int nx,ny; for(int i=0;i<=7;i++){ nx=r.x + mx[i]; ny=r.y + my[i]; if(nx<1||nx>m||ny<1||ny>n) continue; if(vis[nx][ny]) continue; node.x = nx; node.y = ny; Q.push(node); a[nx][ny]=a[r.x][r.y ] +1; vis[nx][ny]=1; } } }int main(){ cin>>m>>n>>sx>>sy; bfs(sx,sy); int i,j; for(i=1;i<=m;i++){ for(j=1;j<=n;j++){ if(a[i][j]==0&&(i!=sx||j!=sy)) a[i][j]=-1; printf("%-5d",a[i][j]); } printf("\n"); } }
阅读全文
0 0
- [LUOGU]P1443 马的遍历
- luogu P1443 马的遍历 【队列 dfs】
- P1443 马的遍历
- P1443 马的遍历
- P1443 马的遍历
- 洛谷P1443 马的遍历
- 洛谷 P1443 马的遍历
- 洛谷 P1443 马的遍历
- 洛谷 P1443 马的遍历
- 洛谷 P1443 马的遍历
- 洛谷 P1443 马的遍历
- 洛谷p1443 马的遍历
- 【p1443-马的遍历】解题记录
- 【搜索】洛谷 P1443 马的遍历
- luogu的第一个任务
- luogu【P1025】数的划分
- Luogu P2799 国王的魔镜
- Luogu P2908 文字的力量
- 设计模式之mvc
- 分治策略时间复杂度计算--综述
- 逆元
- Hadoop/MapReduce 及 Spark KNN分类算法实现
- HDU6230-Palindrome
- [LUOGU]P1443 马的遍历
- 智能指针
- Ubuntu下打开Chrome出现 输入密码以解锁您的登录密钥环
- if 条件是字符串 返回值也是true
- 创业日志(十七) 且迷茫且坚持
- C_string,string,char*的区别和联系
- 公共钥匙盒
- Linux基本指令
- 【原材料准备:Python机器学习】关于深度学习介绍