TYVJ 1261 可达总数 (BFS)

可达总数

From Moe-ing

背景 Background

蛟川书院模拟试题

描述 Description

话说小明在你的帮助下,破密了Ferrari设的第二密码门,正要往前走,不料,前面有面墙,奇怪的事情发生了……

他收到一封来自Ferrari的信,上面写着“哈,你很聪明,但是你已经进入了我的圈套中,实话告诉你,第二关每个结果都应该减一,这里是验证区,看你能不能闯过去了!”小明知道前面的墙有a行b列,Ferrari已在第x行、第y列埋上了炸弹,如果从炸弹开始走(指向上、向下、向左、向右)n步之内(包括0步)的墙就被入侵了,他要把所有入侵的点全部找出来,否则他就有生命危险。请你告诉他有多少墙被入侵了。

输入格式 InputFormat

输入文件kdzs.in共1行,为a,b,x,y,n。

输出格式 OutputFormat

输出文件kdzs.out共1行,就是多少墙被入侵了。

样例输入 SampleInput

6 7 3 2 4

样例输出 SampleOutput

27

数据范围和注释 Hint

10%的数据满足: 1<=x<=a<=100 1<=y<=b<=100 1<=n<=10
100%的数据满足: 1<=x<=a<=1000 1<=y<=b<=1000 1<=n<=100

来源 Source

From hlx1996

BFS记录下步数,统计步数小于n的个数

 1 #include<cstdio>
 2 #include<cmath>
 3 #include<queue>
 4 #include<cstring>
 5 #include<stdlib.h>
 6 #include<algorithm>
 7 using namespace std;
 8 const int MAXN=1000+10;
 9 const int INF=-0x3f3f3f3f;
10 struct node
11 {
12     int x,y;
13     int step;
14 }p;
15 int starx,stary,ans;
16 int n,m,x,y,ok;
17 int vis[MAXN][MAXN];
18 int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
19 void BFS()
20 {
21     memset(vis,0,sizeof(vis));
22     queue<node> Q;
23     ans=0;
24     p.x=starx;
25     p.y=stary;
26     p.step=0;
27     Q.push(p);
28     while(!Q.empty())
29     {
30         node now,next;
31         now=Q.front();
32         Q.pop();
33         for(int i=0;i<4;i++)
34         {
35             next.x=now.x+dir[i][0];
36             next.y=now.y+dir[i][1];
37             next.step=now.step+1;
38             if(0<=next.x && next.x<n && 0<=next.y && next.y<m && !vis[next.x][next.y] && next.step<=ok)
39             {
40                 vis[next.x][next.y]=1;
41                 ans++;
42                 Q.push(next);
43             }
44         }
45     }
46 }
47 int main()
48 {
49     //freopen("in.txt","r",stdin);
50     scanf("%d %d %d %d %d",&n,&m,&x,&y,&ok);
51     starx=x-1;
52     stary=y-1;
53     BFS();
54     printf("%d\n",ans);
55     return 0;
56 }

时间: 2024-11-10 08:23:52

TYVJ 1261 可达总数 (BFS)的相关文章

【bfs】【中等难度】tyvj P1234 - bench与奔驰

P1234 - bench与奔驰 From zhangbh001    Normal (OI) 总时限:10s    内存限制:128MB    代码长度 限制:64KB P1234 - bench与奔驰 背景 Background 公园里有个人在练开奔驰 - -!,但是总是撞在bench上 (众人曰:狼来了,快跑啊!) 描述 Description 公园里的bench与奔驰都是无敌的,不会被撞坏.由于开奔驰的人比较"有特点",总是向上下左右四个方向开,而且只会在撞到椅子之后改变方向(

TYVJ 1030 乳草的入侵(BFS)

背景 Background USACO OCT09 6TH 描述 Description Farmer John一直努力让他的草地充满鲜美多汁的而又健康的牧草.可惜天不从人愿,他在植物大战人类中败下阵来.邪恶的乳草已经在他的农场的西北部份佔领了一片立足之地.草地像往常一样,被分割成一个高度為Y(1 <= y <= 100), 宽度為X(1 <= x <= 100)的直角网格.(1,1)是左下角的格(也就是说坐标排布跟一般的X,Y坐标相同).乳草一开始佔领了格(Mx,My).每个星期

TYVJ 1074 武士风度的牛(BFS)

背景 Background 农民John有很多牛,他想交易其中一头被Don称为The Knight的牛.这头牛有一个独一无二的超能力,在农场里像Knight一样地跳(就是我们熟悉的象棋中马的走法).虽然这头神奇的牛不能跳到树上和石头上,但是它可以在牧场上随意跳,我们把牧场用一个x,y的坐标图来表示. 描述 Description 这头神奇的牛像其它牛一样喜欢吃草,给你一张地图,上面标注了The Knight的开始位置,树.灌木.石头以及其它障碍的位置,除此之外还有一捆草.现在你的任务是,确定Th

TYVJ P3522 &amp;&amp;洛谷 P1135 奇怪的电梯 Label:bfs

题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮:开,关,上,下.上下的层数等于当前楼层上的那个数字.当然,如果不能满足要求,相应的按钮就会失灵.例如:3 3 1 2 5代表了Ki(K1=3,K2=3,……),从一楼开始.在一楼,按“上”可以到4楼,按“下”是不起作用的,因为没有-2楼.那么,从A楼到B楼至少要按几次按钮呢? 输入输出格式 输入格式: 输入文件

TYVJ P1083 分糖果 Label:bfs

描述 童年的我们,将和朋友分享美好的事物作为自己的快乐.这天,C小朋友得到了Plenty of candies,将要把这些糖果分给要好的朋友们.已知糖果从一个人传给另一个人需要1 秒的时间,同一个小朋友不会重复接受糖果.由于糖果足够多,如果某时刻某小朋友接受了糖果,他会将糖果分成若干份,分给那些在他身旁且还没有得到糖果的小朋友们,而且自己会吃一些糖果.由于嘴馋,小朋友们等不及将糖果发完,会在得到糖果后边吃边发.每个小朋友从接受糖果到吃完糖果需要m秒的时间.那么,如果第一秒C小朋友开始发糖,第多少

HDU 1548 A strange lift(Dijkstra,简单BFS)

题目大意: 电梯有两个选项向上或向下,每层楼有一个参数ki,代表电梯可以再该楼层的基础上向上或向下移动ki层,限制条件是向上不能超过楼层总数n,向下不能少于一.输入总层数n和当前所在层数以及目标层数,然后是n个数分别代表第i层的移动范围.输出最少移动次数,若不可达,输出-1. 解题思路: 1.用Dijkstra算法,首先构建邻接矩阵,注意在构造时,要考虑i-k[i]<1和i+k[i]>n,i代表当前所在层. 1 #include<string.h> 2 #include<st

NYOJ21 三个水杯 (经典问题 bfs)

题目描述: http://acm.nyist.net/JudgeOnline/problem.php?pid=21 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互倒水,并且水杯没有标识,只能根据给出的水杯体积来计算.现在要求你写出一个程序,使其输出使初始状态到达目标状态的最少次数. 输入 第一行一个整数N(0<N<50)表示N组测试数据 接下来每组测试数据有两行,第一行给出三个整数V1 V2 V3 (V1>V2>V3 V1<100

图论算法之DFS与BFS

概述(总) DFS是算法中图论部分中最基本的算法之一.对于算法入门者而言,这是一个必须掌握的基本算法.它的算法思想可以运用在很多地方,利用它可以解决很多实际问题,但是深入掌握其原理是我们灵活运用它的关键所在. 含义特点 DFS即深度优先搜索,有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一个顶点V0开始,沿着一条路一直走到底,如果发现不能到达目标解,那就返回到上一个节点,然后从另一条路开始走到底,这种尽量往深处走的概念即是深度优先的概念. 由于用到递归,当节点特别多且深度很大

HDU 1043 Eight八数码解题思路(bfs+hash 打表 IDA* 等)

题目链接 https://vjudge.net/problem/HDU-1043 经典的八数码问题,学过算法的老哥都会拿它练搜索 题意: 给出每行一组的数据,每组数据代表3*3的八数码表,要求程序复原为初始状态 思路: 参加网站比赛时拿到此题目,因为之前写过八数码问题,心中暗喜,于是写出一套暴力bfs+hash,结果TLE呵呵 思路一:bfs+hash(TLE) 1 #include <cstdio> 2 #include <cstring> 3 #include <queu