洛谷
来源:互联网 发布:mp3网络歌曲地址 编辑:程序博客网 时间:2024/05/16 14:20
有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点的最小步数(马走“日”字)。
输入
一行四个数据,分别代表棋盘的大小和马的坐标。
输出
一个n*m的矩阵,代表马到达某个点最少要走几步(左对齐,宽5格,不能到达则输出-1)
样例输入
3 3 1 1
样例输出
0 3 23 -1 12 1 4
参考代码
#include<cstdio>#include<cstring>#include<queue>using namespace std;const int maxn=400+5;int arr[maxn][maxn],vis[maxn][maxn];int tx[8]={-2,-2,2,2,-1,-1,1,1},ty[8]={-1,1,-1,1,-2,2,-2,2};int n,m;int posx,posy;queue<int> dotx,doty;void bfs(int x,int y){dotx.push(x);doty.push(y);arr[x][y]=0;vis[x][y]=1;while(!dotx.empty()){int x=dotx.front();int y=doty.front();dotx.pop();doty.pop();for(int i=0;i<8;i++){int nx=x+tx[i],ny=y+ty[i];if(nx>=0 && nx<n && ny>=0 && ny<m && vis[nx][ny]==0){vis[nx][ny]=1;arr[nx][ny]=arr[x][y]+1;dotx.push(nx);doty.push(ny);}}}}int main(){scanf("%d%d%d%d",&n,&m,&posx,&posy);for (int i=0;i<n;i++) for (int j=0;j<m;j++) arr[i][j]=-1; posx-=1;posy-=1;bfs(posx,posy);for(int i=0;i<n;i++){for(int j=0;j<m;j++)printf("%-5d",arr[i][j]);printf("\n");}return 0;}
阅读全文
1 0
- 洛谷
- 洛谷
- 洛谷
- 洛谷 中位数
- 洛谷p1373
- 洛谷 P1579
- 洛谷P1313
- 洛谷1028
- 洛谷P1373
- 洛谷P1040
- 洛谷P1039
- 洛谷P1341
- 洛谷P1262
- 洛谷 1082
- 洛谷 P1516
- 洛谷 2982
- 洛谷P1967
- 洛谷 1313
- uva 10375 唯一分解定理
- 【Reverse Integer】 --MyLeetCode(三)
- Linux时间子系统(一) -- 原理
- 【拜小白opencv】14-只去除RGB的某一颜色通道
- SublimeClang
- 洛谷
- 快速排序实现
- 主索引和二级索引区别,并创建一个二级索引
- SpringMVC详解(一)------入门实例
- tensorflow 学习笔记9 卷积神经网络(CNN)实现mnist手写识别
- 设计模式之迭代器模式
- Tomcat服务器环境配置
- Kanzi在汽车HMI领域的应用-Kanzi UI Solution
- springCloud微服务使用