bzoj1644 [Usaco2007 Oct]Obstacle Course 障碍训练课
2014-07-30 21:22
465 查看
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广搜……不解释
只要注意搜到某个点朝某个方向的时候向四个方向都判一下转个方向入队
#include<cstdio> #include<cstring> const int mx[4]={1,0,-1,0}; const int my[4]={0,1,0,-1}; int n,sx,sy,ex,ey,ans=100000,t,w; int dist[4][110][110]; int q[100001]; int dire[100001]; bool map[110][110]; char ch[110]; inline int min(int a,int b){return a<b?a:b;} inline void bfs() { for (int i=0;i<4;i++) { q[++w]=(sx-1)*n+sy; dire[w]=i; dist[i][sx][sy]=1; } while (t<w) { int nx;if(q[++t]%n)nx=q[t]/n+1;else nx=q[t]/n; int ny=q[t]%n;if (!ny)ny=n; int d=dire[t]; int step=dist[d][nx][ny]; for (int k=0;k<4;k++) if (step+1<dist[k][nx][ny]) { dist[k][nx][ny]=step+1; q[++w]=(nx-1)*n+ny; dire[w]=k; } int wx=nx+mx[d]; int wy=ny+my[d]; if (wx<1||wy<1||wx>n||wy>n||!map[wx][wy])continue; if (step<dist[d][wx][wy]) { dist[d][wx][wy]=step; q[++w]=(wx-1)*n+wy; dire[w]=d; } } } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%s",ch); for (int j=0;ch[j];j++) { if (ch[j]=='A') { sx=i; sy=j+1; map[i][j+1]=1; }else if (ch[j]=='B') { ex=i; ey=j+1; map[i][j+1]=1; }else if (ch[j]=='.')map[i][j+1]=1; } } memset(dist,127/3,sizeof(dist)); bfs(); for(int i=0;i<4;i++) if (dist[i][ex][ey])ans=min(ans,dist[i][ex][ey]); printf("%d",ans-1); }
相关文章推荐
- bzoj1644 [Usaco2007 Oct]Obstacle Course 障碍训练课
- bzoj 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课 (spfa)
- BZOJ 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课( BFS )
- [BZOJ1644][Usaco2007 Oct]Obstacle Course 障碍训练课(spfa)
- bzoj 3393 && bzoj 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课(BFS)
- bzoj1644: [Usaco2007 Oct]Obstacle Course 障碍训练课
- 【BZOJ】1644: [Usaco2007 Oct]Obstacle Course 障碍训练课(bfs)
- bzoj 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课【spfa】
- 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课
- BZOJ 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课
- 【bzoj1644】 [Usaco2007 Oct]Obstacle Course 障碍训练课
- BZOJ 1644 Usaco2007 Oct Obstacle Course 障碍训练课 SPFA
- [BZOJ1644][Usaco2007Oct]Obstacle Course 障碍训练课(spfa)
- bzoj 1644: Obstacle Course 障碍训练课 BFS
- bzoj 1709: [Usaco2007 Oct]Super Paintball超级弹珠 (乱搞)
- bzoj1708[Usaco2007 Oct]Money奶牛的硬币
- BZOJ1709: [Usaco2007 Oct]Super Paintball超级弹珠
- bzoj 1709: [Usaco2007 Oct]Super Paintball超级弹珠【枚举】
- bzoj1643: [Usaco2007 Oct]Bessie's Secret Pasture 贝茜的秘密草坪
- [bzoj1708][Usaco2007 Oct]Money奶牛的硬币_动态规划_背包dp