首页 > 其他分享 >P1443 马的遍历

P1443 马的遍历

时间:2022-08-24 17:24:04浏览次数:57  
标签:遍历 P1443 int yy kk xx 跳马 步数

P1443 马的遍历

  • 分析:根据题意,本题用bfs求解,马每次有八个方位的走向,将步数初始化为-1,这样如果没有马跳到这个地方就直接输出-1,使用队列先进先出的特点,在马每跳到一个方位后放到队尾,等待下一次跳马,其中要开结构体将矩阵图横纵坐标联系起来,每次在指定范围内跳完后更新点的位置并将步数+1。
  • #include<iostream>
    #include<iomanip>
    #include<queue>
    #include<cstring>
    using namespace std;
    int a[401][401];//记录步数
    int n,m,sx,sy;
    int dx[8]={-2,-2,-1,1,2,2,1,-1};
    int dy[8]={-1,1,2,2,1,-1,-2,-2};
    struct node
    {
    int x,y;
    }k,kk;//k每次在更新完新的值后进入队尾等待下一次跳马
    void bfs(int x,int y)
    {
    a[x][y]=0;//初始步数为0
    k.x=sx;//初始化 开始的点
    k.y=sy;
    queue<node> q;//队列
    q.push(k);//从一开始的点进行跳马
    while(!q.empty())
    {
    kk=q.front();//现下要跳马的点
    q.pop();
    for(int i=0;i<8;i++)//模拟八个方向
    {
    int xx=kk.x+dx[i];//每跳马看到哪
    int yy=kk.y+dy[i];
    if(a[xx][yy]==-1&&xx>=1&&xx<=n&&yy>=1&&yy<=m)
    {//跳到的这个地方没被走过
    k.x=xx;//可以跳 更新x y值到现在的位置
    k.y=yy;
    a[k.x][k.y]=a[kk.x][kk.y]+1;//记录步数
    q.push(k);//刚跳完的点放入队尾准备下一次跳马
    }
    }
    }
    }
    int main()
    {
    cin>>n>>m>>sx>>sy;
    memset(a,-1,sizeof(a));
    bfs(sx,sy);
    for(int i=1;i<=n;i++)
    {
    for(int j=1;j<=m;j++)
    cout<<left<<setw(5)<<a[i][j];
    cout<<endl;
    }
    return 0;
    }

标签:遍历,P1443,int,yy,kk,xx,跳马,步数
From: https://www.cnblogs.com/xdzxjinghan/p/16620913.html

相关文章

  • 词典遍历顺序
     funcmapKeyOrder(){ m:=map[int]struct{}{} fori:=0;i<16;i++{ m[i]=struct{}{} } fori:=0;i<16;i++{ l:=[]int{} fork:=range......
  • 洛谷 P1443 马的遍历
    题目链接:https://www.luogu.com.cn/problem/P1443试题分析:题目是一个比较经典的广搜题,首先我们要读入长,宽,和马起点的坐标,然后将其压入队尾;在队列不为空时,一直取队首并将其......
  • 马的遍历
    马的遍历思路:首先要知道马走日字,可以走8个方向.建立数组a和数组b,分别表示马一步可以走的横纵坐标的对应长度。然后从马的起始位置(队首)开始向周围扩展,并依次记录步......
  • 马的遍历
    开始把马的起点入队,当前节点为马的起点,再把马走日字的几个新节点入队,拓展新节点后就能把当前节点出队。从当前节点开始,走日字的各个节点不超过边界且未曾访问则是能入队的......
  • leetcode 热题100刷题-二叉树的中序遍历
    题题号:94题目:二叉树的中序遍历难度:简单链接:https://leetcode.cn/problems/binary-tree-inorder-traversal/2022/08/23答案算法思路  本题在课程中是学过的。  ......
  • 7-1 顺序表的建立及遍历
    7-1顺序表的建立及遍历分数30作者陈晓梅单位广东外语外贸大学读入n值及n个整数,建立顺序表并遍历输出。输入格式:读入n及n个整数输出格式:输出n个整数,以空格分......
  • JQuery_遍历_for循环、JQuery_遍历2_each方法
    JQuery_遍历_for循环2.遍历1.js的遍历方式*for(初始化值;循环结束条件;步长)2.jq的遍历方式1.jq对象.each(callback)2.$.each(object,[callback])3.for..of: ......
  • 算法---二叉树的前序遍历
    知识点树递归dfs广度优先搜索(BFS)描述给你二叉树的根节点root,返回它节点值的前序遍历。数据范围:二叉树的节点数量满足0≤n≤100 0\len\le100\0≤......
  • JMeter While循环控制器应用之遍历获取文件参数
    While循环控制器应用之遍历获取文件参数by:授客QQ:1033553122测试环境JMeter-5.4.1应用实现单线程在单次迭代内遍历获取文件参数说明:上图仅给出关键配置信息注意:......
  • 二叉树遍历方法总结
    二叉树基本概念面试的时候提到的树,大部分都是二叉树.所谓二叉树是树的一种特殊结构,在二叉树中每个节点最多只能有两个子节点,在二叉树中最重要的操作莫过于遍历,即......