障碍路线Obstacle Course
P1649 [USACO07OCT]障碍路线Obstacle Course
裸的dfs,今天学了一个新招,就是在过程中进行最优性减枝。
#include<bits/stdc++.h>
using namespace std;
int n,sx,sy,ex,ey,ans=;
char a[][];
int d[][];
int x[]={-,,,};
int y[]={,,,-};
bool vis[][]; void dfs(int nx,int ny,int dir,int num)
{
if(nx>n||nx<||ny>n||ny<||vis[nx][ny]||ans==)
return;
if(a[nx][ny]=='x')
return;
if(num>=ans)
return ;
if(num>d[nx][ny])
return;
d[nx][ny]=num;
if(nx==ex&&ny==ey)
{
if(num<ans)
ans=num;
return ;
}
for(int i=;i<;i++)
{
if((abs(i-dir)==||abs(i-dir)==)&&nx+x[i]>&&ny+y[i]>&&!vis[nx+x[i]][ny+y[i]])
{
vis[nx][ny]=true;
dfs(nx+x[i],ny+y[i],i,num);
vis[nx][ny]=false;
}
else
if(!vis[nx+x[i]][ny+y[i]]&&nx+x[i]>&&ny+y[i]>)
{
vis[nx][ny]=true;
dfs(nx+x[i],ny+y[i],i,num+);
vis[nx][ny]=false;
}
}
} int main()
{
cin>>n;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
cin>>a[i][j];
if(a[i][j]=='A')
sx=i,sy=j;
if(a[i][j]=='B')
ex=i,ey=j;
} for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
d[i][j]=;
}
for(int i=;i<;i++)
dfs(sx+x[i],sy+y[i],i,);
if(ans!=)
cout<<ans;
else
cout<<-;
return ;
}
障碍路线Obstacle Course的更多相关文章
- bzoj1644 / P1649 [USACO07OCT]障碍路线Obstacle Course
P1649 [USACO07OCT]障碍路线Obstacle Course bfs 直接上个bfs 注意luogu的题目和bzoj有不同(bzoj保证有解,还有输入格式不同). #include< ...
- 洛谷 P1649 [USACO07OCT]障碍路线Obstacle Course
P1649 [USACO07OCT]障碍路线Obstacle Course 题目描述 Consider an N x N (1 <= N <= 100) square field comp ...
- Luogu P1649 [USACO07OCT]障碍路线Obstacle Course
题目描述 Consider an N x N (1 <= N <= 100) square field composed of 1 by 1 tiles. Some of these ti ...
- P1649 [USACO07OCT]障碍路线Obstacle Course
题目描述 Consider an N x N (1 <= N <= 100) square field composed of 1 by 1 tiles. Some of these ti ...
- [USACO07OCT]障碍路线Obstacle Course
题目描述 Consider an N x N (1 <= N <= 100) square field composed of 1 by 1 tiles. Some of these ti ...
- 洛谷P1649 【[USACO07OCT]障碍路线Obstacle Course】
题目描述 Consider an N x N (1 <= N <= 100) square field composed of 1 by 1 tiles. Some of these ti ...
- [USACO07OCT]障碍路线 & yzoj P1130 拐弯 题解
题意 给出n* n 的图,A为起点,B为终点,* 为障碍,.可以行走,问最少需要拐90度的弯多少次,无法到达输出-1. 解析 思路:构造N * M * 4个点,即将原图的每个点分裂成4个点.其中点(i ...
- [洛谷1649]障碍路线<BFS>
题目链接:https://www.luogu.org/problem/show?pid=1649 历经千辛万苦,我总算是把这个水题AC了,现在心里总觉得一万只草泥马在奔腾: 这是一道很明显的BFS,然 ...
- UVA 1600 Patrol Robot(机器人穿越障碍最短路线BFS)
UVA 1600 Patrol Robot Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu ...
随机推荐
- Java类的5个加载步骤
类加载的五个过程分为: 加载 验证 准备 解析 初始化 1 加载 完成三件事: 通过类的全限定名来获取定义此类的二进制字节流 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构 在内存中生成 ...
- 列式数据库~clickhouse 场景以及安装
一 简介:列式数据库clickhouse的安装与基本操作二 基本介绍:ClickHouse来自俄罗斯,是一款列式数据库三 适用场景: 简单类型的大数据统计四 限制 1 不支持更新操作,不支持事 ...
- python - 练习(获取windows硬件信息)
import subprocess import re # info = subprocess.Popen("systeminfo",shell=True,stdout=subpr ...
- Linux分区设置
基本3个就可以了 序号 路径 大小 格式 ① /boot 200MB ext4 ② 物理内存*1-1.5 swap ③ / 剩余存储空间 ext4
- npm 无法安装 ionic 解决办法
一般从 node.js官网下载安装完之后,npm也会同时安装完. 如果通过 $ npm install -g cordova ionic 去安装,往往会失败.这个是由于GFW,很多插件下载不下来,还好 ...
- Pytorch 之 backward
首先看这个自动求导的参数: grad_variables:形状与variable一致,对于y.backward(),grad_variables相当于链式法则dz/dx=dz/dy × dy/dx 中 ...
- mysql系列三、mysql开启缓存、设置缓存大小、缓存过期机制
一.开启缓存 mysql 开启查询缓存可以有两种方法来开启一种是使用set命令来进行开启,另一种是直接修改my.ini文件来直接设置都是非常的简单的哦. 开启缓存,设置缓存大小,具体实施如下: 1.修 ...
- 转载:Java的四种引用方式
原文:https://www.cnblogs.com/huajiezh/p/5835618.html Java内存管理分为内存分配和内存回收,都不需要程序员负责,垃圾回收的机制主要是看对象是否有引用指 ...
- Account的简单架构
前几天,有园友私下问我,博客中的AccountDemo后端架构为什么是那样的,是不是分层太多太冗余,故这里简单介绍下.先看解决方案工程截图: 每个工程的含义,见https://www.cnblogs. ...
- WebMvcConfigurerAdapter已过时
Spring Boot2.0的版本(创建的时候自动选择的这个版本),然后编译器告诉我WebMvcConfigurerAdapter已过时了 @Deprecated public abstract cl ...