• P1443 马的遍历


    题目大意:

    计算出马到达棋盘上任意一个点最少要走几步。

    思路:

    直接bfs搜索一遍就好了。

    注意事项:

    这道题有几个坑点:

    1. 数组要开大,不然会RE。
    2. 注意马行走的规则,马走日。
    3. 输出要左对齐,宽5格。
    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<queue>
    using namespace std;
    struct Node{
        int x;// 马的x坐标 
        int y;// 马的y坐标 
        int sum;//记录步数 
    }que[101000];//数组模拟队列,由于本人不是很喜欢STL的队列,所以就用数组模拟了 
    long long n,m,mx,my;//棋盘大小,和初始马的坐标 
    long long dx[8]={-2,-2,-1,-1,1,1,2,2};//马可以走到的8个方向 
    long long dy[8]={1,-1,2,-2,2,-2,1,-1};//不知道马怎么走的同学可以去百度,记住马走日就好了 
    long long ans[501][501];//记录答案的数组 
    long long book[501][501];//记录重复的数组 
    void bfs(int n,int m,int mx,int my){
        int head=1,tail=2;//头和尾 
        que[1].x=mx;//马的初始坐标 
        que[1].y=my;//马的初始坐标 
        ans[mx][my]=0;//马所在的位置所用的步数为零 
        book[mx][my]=1;//标记 
        while(head<tail){
            for(int i=0;i<8;i++){//搜索8个点 
                int idx=que[head].x+dx[i];//计算马所在的位置 
                int idy=que[head].y+dy[i];//同理 
                if(idx>0&&idx<=n&&idy>0&&idy<=m&&book[idx][idy]==0){//判断是否越界,是否来过 
                    book[idx][idy]=1;//标记为来过 
                    que[tail].x=idx;//更新马的x坐标 
                    que[tail].y=idy;//更新马的y坐标  
                    que[tail].sum=que[head].sum+1;//更新步数 
                    ans[idx][idy]=que[tail].sum;//记录步数 
                    tail++;//尾++,这里相当于出栈 
                }
            }
            head++;//头++,这里相当于入栈 
        }
    }
    int main(){
        scanf("%lld%lld%lld%lld",&n,&m,&mx,&my);//输入 
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                ans[i][j]=-1;//让答案的初始值为-1 
            }
        }
        bfs(n,m,mx,my);//搜索 
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                printf("%-5lld",ans[i][j]);//输出要注意,左对齐,宽5格 
            }
            printf("
    ");
        }
        return 0;//完美结束 
    }
  • 相关阅读:
    Web 前端 UI 组件库文档自动化方案 All In One
    how to auto open demo and create it in a new codesandbox
    TypeScript & Canvas 实现可视化白板
    2020~2021 职业规划书
    PostCSS All In One
    zsh terminal set infinity scroll height
    npm version ^ meaning
    vue-cli & webpack & vue.config.js
    [HDOJ5350]MZL's munhaff function
    [POJ3061]Subsequence
  • 原文地址:https://www.cnblogs.com/shanxx/p/12893818.html
Copyright © 2020-2023  润新知