Luogu P1649 [USACO07OCT]障碍路线Obstacle Course
题目描述
Consider an N x N (1 <= N <= 100) square field composed of 1
by 1 tiles. Some of these tiles are impassible by cows and are marked with an 'x' in this 5 by 5 field that is challenging to navigate:
. . B x .
. x x A .
. . . x .
. x . . .
. . x . .
Bessie finds herself in one such field at location A and wants to move to location B in order to lick the salt block there. Slow, lumbering creatures like cows do not like to turn and, of course, may only move parallel to the edges of the square field. For a given field, determine the minimum number of ninety degree turns in any path from A to B. The path may begin and end with Bessie facing in any direction. Bessie knows she can get to the salt lick.
N*N(1<=N<=100)方格中,’x’表示不能行走的格子,’.’表示可以行走的格子。卡门很胖,故而不好转弯。现在要从A点走到B点,请问最少要转90度弯几次?
输入输出格式
输入格式:
第一行一个整数N,下面N行,每行N个字符,只出现字符:’.’,’x’,’A’,’B’,表示上面所说的矩阵格子,每个字符后有一个空格。
【数据规模】
2<=N<=100
输出格式:
一个整数:最少转弯次数。如果不能到达,输出-1。
输入输出样例
- 3
- . x A
- . . .
- B x .
- 2
说明
【注释】
只可以上下左右四个方向行走,并且不能走出这些格子之外。开始和结束时的方向可以任意。
- 1//我用的DFS,他们说dfs做不出来,但我做出来了QWQ
#include<bits/stdc++.h>- using namespace std;
- int read()
- {
- int ret=,ok=;char ch=getchar();
- while(ch<''||ch>'') {if(ch=='-')ok=-;ch=getchar();}
- for(;ch>=''&&ch<='';ch=getchar()) ret=ret*+ch-'';
- return ret*ok;
- }
- int n;
- char a[][];
- int ans[][];
- bool vis[][],sea[][];
- int bx[]={-,,,};
- int by[]={,,-,};
- inline void dfs(int sx,int sy)
- {
- sea[sx][sy]=true;
- if(sx>n || sy>n || sy<= || sx<=)
- return;
- vis[sx][sy]=;
- for(int i=sx+;i<=n;i++)
- {
- if(a[i][sy]=='x')
- break;
- if(ans[i][sy]>ans[sx][sy]+)
- {
- ans[i][sy]=ans[sx][sy]+;
- dfs(i,sy);
- }
- vis[i][sy]=true;
- }
- for(int i=sx-;i>=;i--)
- {
- if(a[i][sy]=='x')
- break;
- if(ans[i][sy]>ans[sx][sy]+)
- {
- ans[i][sy]=ans[sx][sy]+;
- dfs(i,sy);
- }
- vis[i][sy]=true;
- }
- for(int i=sy+;i<=n;i++)
- {
- if(a[sx][i]=='x')
- break;
- if(ans[sx][i]>ans[sx][sy]+)
- {
- ans[sx][i]=ans[sx][sy]+;
- dfs(sx,i);
- }
- vis[sx][i]=true;
- }
- for(int i=sy-;i>=;i--)
- {
- if(a[sx][i]=='x')
- break;
- if(ans[sx][i]>ans[sx][sy]+)
- {
- ans[sx][i]=ans[sx][sy]+;
- dfs(sx,i);
- }
- vis[sx][i]=true;
- }
- for(int i=;i<=;i++)
- {
- int nx=sx+bx[i];
- int ny=sy+by[i];
- if(nx>n || ny>n || ny<= || nx<=)
- continue;
- if(vis[nx][ny] && !sea[nx][ny])
- {
- sea[nx][ny]=;
- dfs(nx,ny);
- }
- }
- }
- int main()
- {
- int sx,sy;
- int lx,ly;
- for(int i=;i<=;i++)
- for(int j=;j<=;j++)
- ans[i][j]=; //这一步赋值很关键!之前用memset赋0x7f,会错一个点
- n=read();
- 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;
- ans[i][j]=-;
- }
- if(a[i][j]=='B')
- {
- lx=i;
- ly=j;
- }
- }
- dfs(sx,sy);
- if(ans[lx][ly]==)
- {
- cout<<-<<endl;
- return ;
- }
- cout<<ans[lx][ly]<<endl;
- return ;
- }
Luogu P1649 [USACO07OCT]障碍路线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 ...
- 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 ...
- 障碍路线Obstacle Course
P1649 [USACO07OCT]障碍路线Obstacle Course 裸的dfs,今天学了一个新招,就是在过程中进行最优性减枝. #include<bits/stdc++.h> us ...
- [USACO07OCT]障碍路线 & yzoj P1130 拐弯 题解
题意 给出n* n 的图,A为起点,B为终点,* 为障碍,.可以行走,问最少需要拐90度的弯多少次,无法到达输出-1. 解析 思路:构造N * M * 4个点,即将原图的每个点分裂成4个点.其中点(i ...
- 2021.10.29 P1649 [USACO07OCT]Obstacle Course S(BFS)
2021.10.29 P1649 [USACO07OCT]Obstacle Course S(BFS) 题意: 给一张n*n的图,起点为A,终点为 B,求从A到B转弯次数最少为多少. 分析: 是否存在 ...
- [洛谷1649]障碍路线<BFS>
题目链接:https://www.luogu.org/problem/show?pid=1649 历经千辛万苦,我总算是把这个水题AC了,现在心里总觉得一万只草泥马在奔腾: 这是一道很明显的BFS,然 ...
随机推荐
- Agile&DevOps究竟谁是魔法棒
天下没有神奇的配方 很抱歉,文章的开头我就要说出这个残酷的事实 - 世界上没有任何工具可以魔法般的让你实现敏捷,精益,DevOps.如果只是依赖了工具的自动化,实现了自动化Dev或者Ops,那么别忘了 ...
- VBS基本语法
一.初识VBS Vbs 是一种变量无关.解释性执行的脚本语言.vbs语言中不区分大小写.语句以换行结束. dim 声明变量:批量名称声明,多个变量之间用逗号分隔: set ...
- 【SqlServer系列】开启Sqlserver远程访问
1 概述 已发布[SqlServer系列]文章如下: [SqlServer系列]SQLSERVER安装教程 [SqlServer系列]数据库三大范式 [SqlServer系列]表单查询 [SqlS ...
- Serv-U FTP版本控制服务器 - 目录规范
背景 公司要组建一个版本控制服务器,选定了serv-u,初始目的是应用于war级的一些标准组件的版本控制/测试交付/统一对外发布渠道. 项目过程图: 如果不使用版本控制会出现什么问题? War标准组件 ...
- 如何更换git托管
有时候会遇到需要更换代码托管平台,从github,gitlab或者Bitbucket迁移到其它平台,过程中可能遇到不少问题,本文从是否保留历史提交记录两种需求出发,介绍一下基于git托管平台的迁移方法 ...
- (转)Java线程:大总结
Java线程:大总结 Java线程是Java语言中一个非常重要的部分,Java5之前,多线程的语言支持还是比较弱的,内容也较少,写一个复杂的多线程程序是相当有挑战性的. 在Java5以后,Ja ...
- Java大数据应用领域及就业方向
最难毕业季,2017高校毕业生达到795万,许多学生面临着毕业即失业的尴尬.面对着与日俱增的竞争形势和就业压力,很多毕业生选择去知了堂学习社区镀金,以提高自己的就业竞争力,其中Java大数据是学生选择 ...
- EF 直接修改数据,不再查询数据库
public int UpData(T model, params string[] proNames) { //4.1将 对象 添加到 EF中 DbEntityEntry entry = null; ...
- 解决kindeditor编辑器中使用百度地图时不能拖动坐标的问题
覆盖\plugins\baidumap文件夹下的map.html代码即可 <!doctype html><html><head> <meta http- ...
- 相对路径&绝对路径
粗浅理解: 1)绝对路径:带有访问协议的路径,就是带上http访问协议 2)相对路径: ①以带斜杠开头的相对路径: A)前台相对路径:以web服务器的根路径为参照路径,比如在jsp.HTML中写的路径 ...