dfs1

【rest】搜索练习五

描述 Description

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

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

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

输入格式 InputFormat

第 1行: 一个整数 N 行.

2..N + 1: 行 i+1 有 N 个字符 (‘.‘, ‘x‘, ‘A‘, ‘B‘),表示每个点的状态。

输出格式 OutputFormat

行 1: 一个整数,最少的转弯次数。

样例输入 SampleInput

8
.Bxx....
........
........
.x.....A
........
........
........
........

样例输出 SampleOutput

#include <stdio.h>

#include <iostream>

#include <cstring>

#include <algorithm>

#include <cmath>

using namespace std;

const int inf=0x7fffffff/27.11;

const int dx[5]={0,0,0,1,-1};

const int dy[5]={0,1,-1,0,0};

struct point

{

int z,y,x;

}q[100000];

char a[105][105];

int f[105][105][5];

bool b[105][105][5];

int i,j,t,n,m,l,r,k,z,y,x,sx,sy,ex,ey;

char ch;

int main()

{

scanf("%d\n",&n);

for (i=1;i<=n;i++)

{

for (j=1;j<=n;j++)

{

ch=getchar();

a[i][j]=ch;

if (a[i][j]==‘A‘) sx=i,sy=j;

if (a[i][j]==‘B‘) ex=i,ey=j;

}

ch=getchar();

}

memset(b,false,sizeof(b));

for (i=1;i<=n;i++) for (j=1;j<=n;j++) for (k=1;k<=4;k++) f[i][j][k]=inf;

l=1;r=0;

for (i=1;i<=4;i++)

{

q[++r].x=sx;q[r].y=sy;q[r].z=i;

b[q[r].x][q[r].y][q[r].z]=true;

f[q[r].x][q[r].y][q[r].z]=0;

}

while (l<=r)

{

for (i=1;i<=4;i++)

{

int tx=q[l].x+dx[i];

int ty=q[l].y+dy[i];

int tz=f[q[l].x][q[l].y][q[l].z]+(q[l].z!=i);

if (tx<=0 || tx>n || ty<=0 || ty>n || a[tx][ty]==‘x‘) continue;

if (tz<f[tx][ty][i])

{

f[tx][ty][i]=tz;

if (b[tx][ty][i]==false)

{

q[++r].x=tx;q[r].y=ty;q[r].z=i;

b[tx][ty][i]=true;

}

}

}

b[q[l].x][q[l].y][q[l].z]=false;

l++;

}

int ans=inf;

for (i=1;i<=4;i++) ans=min(ans,f[ex][ey][i]);

printf("%d\n",ans);

return 0;

}

时间: 2024-10-05 10:29:52

dfs1的相关文章

HDU 6203 ping ping ping [LCA,贪心,DFS序,BIT(树状数组)]

题目链接:[http://acm.hdu.edu.cn/showproblem.php?pid=6203] 题意 :给出一棵树,如果(a,b)路径上有坏点,那么(a,b)之间不联通,给出一些不联通的点对,然后判断最少有多少个坏点. 题解 :求每个点对的LCA,然后根据LCA的深度排序.从LCA最深的点对开始,如果a或者b点已经有点被标记了,那么continue,否者标记(a,b)LCA的子树每个顶点加1. #include<Bits/stdc++.h> using namespace std;

ZJOI 2008 树的统计

ZJOI2008 树的统计 题目描述 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w. 我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节点的权值和 注意:从点u到点v的路径上的节点包括u和v本身 输入输出格式 输入格式: 输入文件的第一行为一个整数n,表示节点的个数. 接下来n – 1行,每行2个整数

Ch’s gift

Ch’s gift Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Description Mr. Cui is working off-campus and he misses his girl friend very much. After a whole night tossing and turning, he decides to get to his

luoguP2590 [ZJOI2008]树的统计 [树链剖分] [TLE的LCT]

题目描述 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w. 我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节点的权值和 注意:从点u到点v的路径上的节点包括u和v本身 输入输出格式 输入格式: 输入文件的第一行为一个整数n,表示节点的个数. 接下来n – 1行,每行2个整数a和b,表示节点a和节点b之

旧题新做:从idy的视角看数据结构

“今天你不写总结……!!!” 额…… 还是讲我的吧.这些考试都是idy出的题. 20170121:DFS序. ST表.线段树练习 这是第一次考数据结构. Problem 1. setsum 1 second 给你一个长度为N 的整数序列,支持两种操作: • modity l r val 将区间[l,r] 中的所有数修改为val • query l r 询问区间[l,r] 所有数的和 分析:最简单的线段树,区间更改区间求和.但注意是更改,不是添改,sum与flag需同时覆盖. Problem 2.

【NOI2009】植物大战僵尸

P1589 - [NOI2009]植物大战僵尸 Description Plants vs. Zombies(PVZ)是最近十分风靡的一款小游戏.Plants(植物)和Zombies(僵尸)是游戏的主角,其中Plants防守,而 Zombies进攻.该款游戏包含多种不同的挑战系列,比如Protect Your Brain.Bowling等等.其中最为经典的,莫过于玩家通过控制Plants来防守Zombies的进攻,或者相反地由玩家通过控制Zombies 对Plants发起进攻. 现在,我们将要考

bzoj4568 [Scoi2016]幸运数字

Description A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城市的正中心,作为城市的象征.一些旅行者希望游览 A 国.旅行者计划乘飞机降落在 x 号城市,沿着 x 号城市到 y 号城市之间那条唯一的路径游览,最终从 y 城市起飞离开 A 国.在经过每一座城市时,游览者就会有机会与这座城市的幸运数字拍照,从而将这份幸运保存到自己身上.然而,幸运是不能简单叠加的,这一点游览者也十分清楚.他们迷

SZOJ 167 Lca裸题

一道.......一道我改了一周的裸题 无根树建双向边 无根树建双向边 无根树建双向边 重要的事情说三遍(微笑) 还有要开longlong 还有双向边不是双倍边(微笑) 我真是,能把自己气吐血10次就不把自己气吐血9次 [问题描述] 已知一棵nn个点的树,点从1开始标号,树上每条边都有一个正整数边权. 有qq个询问,每个询问由type,u,vtype,u,v三个正整数构成. 当type=1type=1时,询问uu到vv路径上所有边权的二进制异或和. 当type=2type=2时,询问uu到vv路

2016 ACM/ICPC Asia Regional Qingdao Online

吐槽: 群O的不是很舒服 不知道自己应该干嘛 怎样才能在团队中充分发挥自己价值 一点都不想写题 理想中的情况是想题丢给别人写 但明显滞后 一道题拖沓很久 中途出岔子又返回来搞 最放心的是微软微软妹可以随便丢 有几个小盆友也比较靠谱 还有几个小盆友一开始有点担心 后来都做的挺棒 写题的选择上很尴尬 会写的别人也会 要么队内都不会 结果大概是写了一些板子题 感觉到了比较艰难的阶段 有些题是要我学着去写的 不会写没有突破 1001 I Count Two Three AC by ctr 指数不会很大,