首页 > 代码库 > TYVJ 1261 可达总数 (BFS)
TYVJ 1261 可达总数 (BFS)
可达总数
From Moe-ing
背景 Background
蛟川书院模拟试题
描述 Description
话说小明在你的帮助下,破密了Ferrari设的第二密码门,正要往前走,不料,前面有面墙,奇怪的事情发生了……
他收到一封来自Ferrari的信,上面写着“哈,你很聪明,但是你已经进入了我的圈套中,实话告诉你,第二关每个结果都应该减一,这里是验证区,看你能不能闯过去了!”小明知道前面的墙有a行b列,Ferrari已在第x行、第y列埋上了炸弹,如果从炸弹开始走(指向上、向下、向左、向右)n步之内(包括0步)的墙就被入侵了,他要把所有入侵的点全部找出来,否则他就有生命危险。请你告诉他有多少墙被入侵了。
他收到一封来自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
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 node11 {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 }
TYVJ 1261 可达总数 (BFS)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。