lg1443马的遍历
来源:互联网 发布:日本清酒 知乎 编辑:程序博客网 时间:2024/06/05 11:20
题目描述
有一个n*m的棋盘
在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步
输入输出格式
输入格式:
一行四个数据,棋盘的大小和马的坐标
输出格式:
一个n*m的矩阵,代表马到达某个点最少要走几步(左对齐,宽5格,不能到达则输出-1)
输入输出样例
输入样例#1: 复制
3 3 1 1
输出样例#1: 复制
0 3 2
3 -1 1
2 1 4
一直以为自己不会BFS的 尴尬了 BFS 的模板
#include<bits/stdc++.h>using namespace std;#define maxn 400+100int a[8][2]={{-1,-2},{-2,-1},{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2}};int c[maxn][maxn];bool fa[maxn][maxn];int m,n;struct ac{ int x,y;}b[maxn];queue<ac>q;void BFS(int sx,int sy){ ac w; w.x=sx; w.y=sy; q.push(w); while(!q.empty()){ w=q.front(); q.pop(); for(int j=0;j<8;j++){ ac e=w; e.x+=a[j][0]; e.y+=a[j][1]; if(e.x>n||e.y>m||e.x<1||e.y<1||fa[e.x][e.y]) continue; c[e.x][e.y]=c[w.x][w.y]+1; fa[e.x][e.y]=1; q.push(e); } }}int main(){ int x,y; cin>>n>>m>>x>>y; memset(c,-1,sizeof(c)); memset(fa,0,sizeof(fa)); fa[x][y]=1; c[x][y]=0; BFS(x,y); for(int j=1;j<=n;j++){ for(int k=1;k<=m;k++){ printf("%-5d",c[j][k]); } cout<<endl; } return 0;}
阅读全文
0 0
- lg1443马的遍历
- LG1443 马的遍历
- 图的遍历算法-马遍历棋盘
- 图的遍历算法-马遍历棋盘
- 马的遍历问题
- 马的遍历
- 马的遍历问题
- 马的遍历
- 马的遍历
- 马的遍历
- 马的遍历问题
- 马的遍历
- poj1915 马的遍历
- 马的遍历问题
- 马的遍历问题
- 马的遍历问题
- [BFS]马的遍历
- P1443 马的遍历
- Android隐藏标题栏的四种方法
- 成为Java软件架构师必看的东西
- Matlab读取和显示图像
- jQuery高级编程一书总结
- 商品管理系统_增删改查过滤
- lg1443马的遍历
- Android Studio出现Error:resource style/Base.V25.Theme.AppCompat.Light、aapt2.Aapt2Exception: AAPT2 erro
- 欢迎使用CSDN-markdown编辑器
- 初学者---Android (简单总结)Retrofit请求方式之get,post
- 格雷码(c/python略)
- ubantu镜像修改
- 购物车管理
- STM32 系统架构及存储器映射
- 【市选模拟题】合并果子