题目
Description
考虑一个 N x N (1 <= N <= 100)的有1个个方格组成的正方形牧场。有些方格是奶牛们不能踏上的,它们被标记为了’x’。
例如下图:

. . B x .
. x x A .
. . . x .
. x . . .
. . x . .

贝茜发现自己恰好在点A出,她想去B处的盐块添盐。缓慢而且笨拙的动物,比如奶牛,十分讨厌转弯。尽管如此当然在必要的时候她们还是会转弯的。对于一个给定的牧场,请你计算从A到B最少的转弯次数。开始的时候贝茜可以使面对任意一个方向。贝茜知道她一定可以到达。
Input

行 1: 一个整数 N
行 2…N + 1: 行 i+1 有 N 个字符 (’.’, ‘x’, ‘A’, ‘B’),表示每个点的状态。
Output
行 1: 一个整数,最少的转弯次数。
Sample Input
3
.xA

Bx.
Sample Output
2
思路
听说这道题用暴搜+玄学的dir数组顺序可以AC但是我没试过
正解:BFS加一点记忆化。
而且需要注意的是,最短路径不代表最少转弯次数,后搜到的反而可能更优,当然也可能不,所以就需要添加记忆化搜索;
记忆化:用f[i][j][k]表示在(i,j)朝向方向k(0-3分别代表一个方向),每次改变k进行搜索,最后输出以终点为坐标,朝向四个方向的转弯次数的最小值就可以了。过程中打标记的vis数组也要开成三维的,不然不方便标记。

代码

 #include<bits/stdc++.h>
using namespace std;
int n,sx,sy,tx,ty,ans=0x3f3f3f3f;
char a[][],s[];
int f[][][],dx[]={,,,-},dy[]={,-,,};
bool vis[][][];
// 0 1 2 3
//右 左 上 下
struct node
{
int x,y,dir;
};
queue <node> q;
int min_(int a,int b,int c,int d)
{
if (a>b) a=b;
if (a>c) a=c;
if (a>d) a=d;
return a;
}
void init()
{
for(int i=;i<;i++)
for(int j=;j<;j++)
for(int k=;k<;k++)
f[i][j][k]=0x3f3f3f3f;
f[sx][sy][]=;
f[sx][sy][]=;
f[sx][sy][]=;
f[sx][sy][]=;
vis[sx][sy][]=;
vis[sx][sy][]=;
vis[sx][sy][]=;
vis[sx][sy][]=;
q.push((node){sx,sy,});
q.push((node){sx,sy,});
q.push((node){sx,sy,});
q.push((node){sx,sy,}); }
bool not_in(int x,int y)
{
return x<||x>n||y<||y>n||a[x][y]=='x';
}
void bfs()
{
init();
while(!q.empty())
{
node now=q.front();
q.pop();
vis[now.x][now.y][now.dir]=false;
for (int i=;i<;i++)
{
int x=now.x+dx[i],y=now.y+dy[i];
if(not_in(x,y))continue;
int l;
if(i==now.dir)l=;
else l=;
if (f[x][y][i]>f[now.x][now.y][now.dir]+l)
{
f[x][y][i]=f[now.x][now.y][now.dir]+l;
if(!vis[x][y][i])
vis[x][y][i]=,q.push((node){x,y,i});
}
}
}
}
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')tx=i,ty=j;
}
}
bfs();
ans=min_(f[tx][ty][],f[tx][ty][],f[tx][ty][],f[tx][ty][]);
if(ans!=0x3f3f3f3f)
cout<<ans<<endl;
else cout<<-<<endl;
return ;
}

【题解】[USACO2007 OCT]Obstacle Course-C++的更多相关文章

  1. BZOJ 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课

    题目 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课 Time Limit: 5 Sec  Memory Limit: 64 MB Description 考虑一 ...

  2. 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课

    1644: [Usaco2007 Oct]Obstacle Course 障碍训练课 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 383  Solved ...

  3. BZOJ 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课( BFS )

    BFS... 我连水题都不会写了QAQ ------------------------------------------------------------------------- #inclu ...

  4. bzoj1644 [Usaco2007 Oct]Obstacle Course 障碍训练课

    Description 考虑一个 N x N (1 <= N <= 100)的有1个个方格组成的正方形牧场.有些方格是奶牛们不能踏上的,它们被标记为了'x'.例如下图: . . B x . ...

  5. 【BZOJ】1644: [Usaco2007 Oct]Obstacle Course 障碍训练课(bfs)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1644 这和原来一题用dp来做的bfs很像啊orz.. 我们设f[i][j][k]代表i,j这个点之前 ...

  6. bzoj 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课【spfa】

    洛谷的数据毒啊 把(i,j,k)作为一个点spfa,表示点(i,j)朝向k方向,然后向四个方向转移即可 #include<iostream> #include<cstdio> ...

  7. BZOJ1709: [Usaco2007 Oct]Super Paintball超级弹珠

    1709: [Usaco2007 Oct]Super Paintball超级弹珠 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 324  Solved: ...

  8. BZOJ1708: [Usaco2007 Oct]Money奶牛的硬币

    1708: [Usaco2007 Oct]Money奶牛的硬币 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 513  Solved: 329[Submi ...

  9. 1709: [Usaco2007 Oct]Super Paintball超级弹珠

    1709: [Usaco2007 Oct]Super Paintball超级弹珠 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 339  Solved:  ...

随机推荐

  1. 1261: 单位转换(Java)

    WUSTOJ 1261: 单位转换 参考资料 数字字符串拆分--百度知道 Description BobLee最近在复习考研,在复习计算机组成原理的时候,遇到了一个问题.就是在计算机存储里面的单位转换 ...

  2. GPIO 输出—使用固件库点亮 LED

    编程要点 1. 使能 GPIO 端口时钟:  2. 初始化 GPIO 目标引脚为推挽输出模式:  3. 编写简单测试程序,控制 GPIO 引脚输出高.低电平. LED的电路图 过程: 1.拷贝一个库函 ...

  3. ajax post上传数据时,前端出现的跨域权限问题:ccess to XMLHttpRequest at ‘’rom origin 'null' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok st

    本人前端使用多个框架时,jq  ajax传参出现如下报错: 最后发现,可能是xhr的相关默认参数被修改了.顾使用jq 传参时,一直报错,jq  ajax额外添加的关键参数: crossDomain: ...

  4. IDEA中通过Maven插件使用MyBatis Generator

    这样做更简单,参考: IDEA集成MyBatis Generator 插件 详解

  5. leetcode --165--php

    class Solution { /** * @param String $version1 * @param String $version2 * @return Integer */ functi ...

  6. 在论坛中出现的比较难的sql问题:3(row_number函数 分组查询)

    原文:在论坛中出现的比较难的sql问题:3(row_number函数 分组查询) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所 ...

  7. MySQL 的COUNT(x)性能怎么样?

    做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! x 可以代表: 主键id.字段.1.* 0 说明 对于count(主键id)来说 innodb引擎会遍历整张表,把每一行的 ...

  8. webAPI中“System.Web.Http.HttpConfiguration”不包含“EnableSystemDiagnosticsTracing”的定义解决办法

    webAPI中“System.Web.Http.HttpConfiguration”不包含“EnableSystemDiagnosticsTracing”的定义 今天从 运行 WebAPI 工程的代码 ...

  9. 题解 P3378 【【模板】堆】

    Update 18.2.27----想当年我还用着C..... 看到题解里一堆用C++ STL库中的优先队列,身为C语言选手心里不是滋味 故手打一个优先队列献给坚守在C语言的选手 #include & ...

  10. 一次腾讯云centos服务器被入侵的处理

    昨天一大早,我还没到公司呢,就收到腾讯云安全中心发来的服务器异常登录告警,登录控制台一看,ip还是美国的,一脸懵逼.由于本人之前也没有过处理服务器入侵的经验,而且这台服务器目前还没有部署商用系统,所以 ...