zoukankan      html  css  js  c++  java
  • P1747 好奇怪的游戏

         显然是一道广搜模板题;

       代码:

       

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<queue>
     4 #include<cstring>
     5 using namespace std;
     6 
     7 struct zkw{
     8     int x; //所在位置的横坐标 
     9     int y; //所在位置的纵坐标 
    10     int d; //已走的步数 
    11 };
    12 zkw w;
    13 
    14 queue<zkw> q; // STL队列 
    15 
    16 int dx[13]={0,-2,-2,-1,1,2,2,2,2,1,-1,-2,-2}; // 共12个方向 
    17 int dy[13]={0,1,2,2,2,2,1,-1,-2,-2,-2,-2,-1};
    18 
    19 bool vis[25][25]; // 标记是否走过 
    20 
    21 void bfs(){
    22     while(!q.empty()){
    23         w=q.front();
    24         q.pop();
    25         for(int i=0;i<13;++i){ //枚举所走的方向 
    26             int xx=w.x+dx[i],yy=w.y+dy[i];
    27             if(xx==1 && yy==1){ //若符合要求,停止索索,输出答案 
    28                 printf("%d",w.d+1);
    29                 return;
    30             }
    31             if(xx>=1 && xx<=20 && yy>=1 && yy<=20 && !vis[xx][yy]){ // 继续搜索 
    32                 vis[xx][yy]=true;
    33                 q.push((zkw){xx,yy,w.d+1});
    34             }
    35         }
    36     }
    37 }
    38 
    39 int main(){
    40     int x,y,a,b;
    41     scanf("%d%d%d%d",&x,&y,&a,&b);
    42     q.push((zkw){x,y,0});
    43     vis[x][y]=true;
    44     bfs();
    45     printf("
    ");
    46     memset(vis,0,sizeof(vis)); //清空 
    47     vis[a][b]=true;
    48     while(!q.empty()){ // 清空队列,为下一次搜索做准备 
    49         q.pop();
    50     }
    51     w=(zkw){0,0,0};
    52     q.push((zkw){a,b,0});
    53     bfs();
    54     return 0;
    55 }
  • 相关阅读:
    Nginx服务器环境搭建
    PostgreSQL常见问题处理方法
    Linux之awk使用
    PostgreSQL常用SQL
    用apache commons-pool2建立thrift连接池
    redis开发小结
    如何解决netty发送消息截断问题
    后端服务开发总结
    利用git reflog找回错误的重置
    TCP长链接调试利器nc
  • 原文地址:https://www.cnblogs.com/zkw666/p/13339607.html
Copyright © 2011-2022 走看看