zoukankan      html  css  js  c++  java
  • 1330:【例8.3】最少步数

    http://ybt.ssoier.cn:8088/problem_show.php?pid=1330

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int ax, ay, bx, by;
     4 struct node{           //结构体标记当前位置坐标和到该坐标步数 
     5     int x, y, step;
     6 };
     7 node que[10010];        //结构数组用于存储队列 
     8 int f, r;                //队列首尾 
     9 bool vis[105][105];    //标记坐标点是否被访问 
    10 int dir[12][2]={{-1,-2},{-2,-1},{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2},{-2,-2},{-2,2},{2,2},{2,-2}};
    11 void bfs(int x, int y){
    12     f=r=1;                                //初始化队列 
    13     memset(vis, 0, sizeof(vis));        //设置vis初始化为0 
    14     que[r].x=x, que[r].y=y, que[r].step=0, vis[x][y]=1;        //初始位置入队 
    15     while(f<=r){
    16         node t;                     //获取队首信息 
    17         t.x=que[f].x;
    18         t.y=que[f].y;
    19         t.step=que[f].step; 
    20         if(t.x==1 && t.y==1){        //如果达到目标则输出答案退出 
    21             cout<<t.step<<endl;
    22             break;
    23         }
    24         for(int i=0; i<12; i++){    //按照要求遍历马可以到达的位置 
    25             int nx=t.x+dir[i][0];
    26             int ny=t.y+dir[i][1];
    27             if(nx>=1 && nx<=100 && ny>=1 && ny<=100 && vis[nx][ny]==0){    //判断是否越界且可以访问 
    28                 vis[nx][ny]=1;
    29                 r++;                //队尾后移准备入队 
    30                 que[r].x=nx;
    31                 que[r].y=ny;
    32                 que[r].step=t.step+1;
    33             }
    34         }
    35         f++;            //队首后移准备出队 
    36     }
    37 }
    38 int main()
    39 {
    40     cin>>ax>>ay>>bx>>by;
    41     bfs(ax, ay);
    42     bfs(bx, by);
    43     return 0;
    44  } 
  • 相关阅读:
    读操作
    读锁与写锁
    Mvcc
    readView
    版本链
    事务的隔离性
    索引的代价
    keras backend的修改
    caffe 笔记
    菜品识别 SDK调用
  • 原文地址:https://www.cnblogs.com/tflsnoi/p/13747502.html
Copyright © 2011-2022 走看看