lanqiao OJ 234 大胖子走迷宫

简介: lanqiao OJ 234 大胖子走迷宫

1.大胖子走迷宫 - 蓝桥云课 (lanqiao.cn)

bfs搜索

每个时间段胖子的体型不同 , 分为三种 ,所以我们要分三种判别的方式

因为样例保证能找到出路,所以在胖子很胖的时候被可能被恰住,但是变成1的时候一定不会被卡住,所以我们直接把体积t!=1的时候胖子的位置再加入队列中,但是时间加1 ,这样的话就可以实现胖子原地呆1步;

#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std ;
 
const int N = 310 ;
char mp[N][N] ;
int d[4][2] = {{0,1},{0,-1},{1,0},{-1,0}} ;
int n , k ,t; 
bool v[N][N] ;
struct node{
  int x, y ,dis ;
  node(int xx, int yy , int diss){
    x = xx , y = yy , dis = diss ;
  }
};
queue<node> q;
 
 
bool check_5(int x,int y){
  if(v[x][y]) return false ;
  for(int i = x-2; i <= x +2 ; i ++){
    for(int j = y-2; j <= y +2 ; j ++){
      if(i < 0 || i >= n|| j < 0|| j >= n ) return false ;
      if(mp[i][j] == '*') return false ;
    }
  }
  return true ;
}
bool check_3(int x,int y){
  if(v[x][y]) return false ;
  for(int i = x-1; i <= x +1 ; i ++){
    for(int j = y-1; j <= y +1 ; j ++){
      if(i < 0 || i >= n|| j < 0|| j >= n ) return false ;
      if( mp[i][j] == '*') return false ;
    }
  }
  return true ;
}
bool check_1(int x,int y){
    if(v[x][y]) return false ;
    if(x < 0 || x >= n|| y < 0|| y >= n ) return false ;
    if( mp[x][y] == '*') return false ;
    return true ;
}
void bfs(){
  q.push(node(2,2,0)) ;
  while(!q.empty()){
    node now = q.front() ;
    q.pop() ;
    int x = now.x  , y = now.y  ;
    if(x == n-3 && y == n-3) {
      cout << now.dis << endl ; return ;
    }
    if(now.dis < k) t = 5 ;
    else if(now.dis >= k&& now.dis < 2*k) t = 3 ;
    else if(now.dis >= 2*k) t = 1; 
    
    if(t!=1) q.push(node(x,y,now.dis+1)) ;
    for(int i = 0 ; i < 4 ; i ++){
      int tx = x +d[i][0], ty = y + d[i][1] ;
      if(t==5){
        if(check_5(tx,ty) ) {
          v[tx][ty] = 1 ;
          q.push(node(tx,ty,now.dis+1)) ;
        }
        
      }
      else if(t==3) {
        if(check_3(tx,ty)){
          v[tx][ty] = 1 ;
          q.push(node(tx,ty,now.dis+1)) ;
        }
      }
      else if(t == 1){
        if(check_1(tx,ty)){
          v[tx][ty] = 1 ;
          q.push(node(tx,ty,now.dis+1)) ;
        }
      }
    }
  }
}
 
int main(){
  cin >> n >> k ;
  for(int i = 0; i < n ; i ++) cin >> mp[i] ;
  v[2][2] = 1 ;
  bfs();
  return 0 ;
}


目录
相关文章
|
机器学习/深度学习 算法 决策智能
ubuntu16.04下ROS操作系统学习笔记(六 )机器视觉-摄像头标定-ROS+OpenCv-人脸识别-物体跟踪-二维码识别(下)
ubuntu16.04下ROS操作系统学习笔记(六 )机器视觉-摄像头标定-ROS+OpenCv-人脸识别-物体跟踪-二维码识别(下)
871 0
|
安全 前端开发 Java
Android基础--kotlin(一)
kotlin是一种在 Java虚拟机上执行的静态型别编程语言,它主要是由俄罗斯圣彼得堡的JetBrains开发团队所发展出来的编程语言。该语言有几个优势 1. 简洁 它大大减少你需要写的样板代码的数量。 2. 安全 避免空指针异常等整个类的错误。 3. 通用 构建服务器端程序、Android 应用程序或者在浏览器中运行的前端程序。 4. 互操作性 通过 100% Java 互操作性(100%兼容),可可以直接调用Java代码,可以无缝使用Java库。
|
SQL 分布式计算 资源调度
导入 Import--全量数据导入 Hdfs | 学习笔记
快速学习 导入 Import--全量数据导入 Hdfs
369 0
导入 Import--全量数据导入 Hdfs | 学习笔记
|
设计模式 Python
一日一技:在 Python 里面如何实现一个抽象类
一日一技:在 Python 里面如何实现一个抽象类
340 0
一日一技:在 Python 里面如何实现一个抽象类
|
Java
Java中模拟一个trim方法,去除字符串两端的空格
Java中模拟一个trim方法,去除字符串两端的空格
338 0
|
JavaScript Java
静态资源与首页展示【源码剖析】
静态资源与首页展示【源码剖析】
静态资源与首页展示【源码剖析】
|
缓存 Java Linux
Java IO
2103 0
|
Web App开发 安全 CDN
在iis6中启用Gzip
现在主流浏览器基本都支持 Gzip 压缩,因此这也成了 WebServer 优化策略的一种常规手段。启用压缩后能有效减少网页传输数据大小,使得有限带宽能提供更多的请求,并在一定程度上提高了网页 “显示” 速度。
1250 0