ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

洛谷P1443 马的遍历

2019-04-12 22:55:00  阅读:334  来源: 互联网

标签:node 遍历 洛谷 P1443 int Top newx newy 401


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

很经典的搜索题了,蒟蒻用广搜打的

不说了,上代码!

#include<bits/stdc++.h>
using namespace std;
struct xy {//定义结构体
    int x,y;//x,y两个方向
} node,Top;
int dx[8]={2,-2,2,-2,-1,1,-1,1};
int dy[8]={1,1,-1,-1,2,2,-2,-2};//马走的八个方向
int a[401][401];
bool b[401][401];
int n,m;
void bfs(int x,int y,int step) {//广搜函数
    a[x][y]=step;
    b[x][y]=false;
    queue<xy>q;//建立一个队列
    node.x=x;
    node.y=y;
    q.push(node);//入队
    while (!q.empty()){//如果队列不为空就循环
        Top=q.front();//取队首元素
        q.pop();//出队
        for (int i=0;i<8;i++){
            int newx=Top.x+dx[i];
            int newy=Top.y+dy[i];//往八个方向遍历
            if (newx<1||newx>n||newy<1||newy>m) continue;//判断是否越界
            if (b[newx][newy]){//如果该点没有标记过 
                node.x=newx;
                node.y=newy;//更新
                q.push(node);//入队
                b[newx][newy]=false;//标记
                a[newx][newy]=a[Top.x][Top.y]+1;//步数+1
            }
        }
    }
}
int main() {
    memset(b,true,sizeof(b));
    memset(a,-1,sizeof(a));//数组初始化
    int x,y;
    cin>>n>>m>>x>>y;//输入
    bfs(x,y,0);//广搜
    for (int i=1; i<=n; i++) {
        for (int j=1; j<=m; j++)
            printf("%-5d", a[i][j]);//输出五位常宽
        cout<<endl;//换行
    }
    return 0;
}

 

标签:node,遍历,洛谷,P1443,int,Top,newx,newy,401
来源: https://www.cnblogs.com/dickgwx/p/10699126.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有