• P1443 马的遍历


    大致题意:

    • 计算出在某个点上的马走到其他点上最少要走几步,
    • 走不到的点标记为-1,走到的点标记为最少的步数,
    • 马走“日”字。

    基本思路

    • 嗯…直接bfs一波带走就好了。
    • 从原点走“日”字,到一处若没有被标记则标记上,
    • bfs完的时候若是发现此点没有被标记就标记为-1。

    Code:

    //还是远古时期的码风...见谅
    #include <iostream>
    #include <cstdio>
    #include <queue>
    using namespace std;
    queue<int> a,b,step;
    int n,m;
    int k[410][410];
    int pd[410][410];
    int ax,ay;
    int dx[8]={-2,-2,-1,-1,1,1,2,2};//若(x,y)为现在马所在的点,
    int dy[8]={-1,1,-2,2,-2,2,-1,1};//则(x+dx[0~7],y+dy[0~7])为现在马能去的点
    void bfs(int idx,int idy){//还是bfs的基础模板啊啊啊
        a.push(idx);
        b.push(idy);
        step.push(0);//进队列
        pd[idx][idy]=1;//标记原点已经来过
        while(!a.empty()){
            for(int i=0;i<8;++i){//便利能去的点
                int x=a.front()+dx[i];//记录能去的点
                int y=b.front()+dy[i];
                int step_=step.front();//记录去那个点要花的步数
                if(pd[x][y]==0){//若那个点没去过
                    if(x>=0&&x<n&&y>=0&&y<m){//且若那个点没有超出边界
                        a.push(x);
                        b.push(y);
                        step.push(step_+1);//进队列
                        k[x][y]=step_+1;//记录步数
                        pd[x][y]=1;//标记来过
                    }
                }
            }
            a.pop();
            b.pop();
            step.pop();//出队列
        }
    }
    int main(){
        cin>>n>>m>>ax>>ay;
        bfs(--ax,--ay);
        for(int i=0;i<n;++i){
            for(int j=0;j<m;++j){
                if(k[i][j]==0)k[i][j]=-1;
            }
        }//找出没有去过的点标记为-1
        k[ax][ay]=0;//原点不能是-1,再标记回来
        for(int i=0;i<n;++i){
            for(int j=0;j<m;++j){
                printf("%-5d",k[i][j]);
            }
            printf("
    ");
        }//输出
        return 0;
    }
    
  • 相关阅读:
    poj1141
    poj1260
    poj1080
    poj1221
    用Microsoft Office SharePoint Designer 2007开发aspx
    在Web Part中使用User Control
    MOSS中的WebPart开发
    在MOSS中开发一个模块化的feature
    SharePoint Web Service的身份验证
    MOSS中对列表的一些操作(创建,查询等)
  • 原文地址:https://www.cnblogs.com/FUXyao/p/12885403.html
Copyright © 2020-2023  润新知