捕牛记(1503)解题报告(bfs)

解题思路:每到一个坐标点都有三种走法,每个点只走一次,直到第一次发现牛的坐标为止。用广度优先搜索(Breadth First Search)(bfs)

代码实现:定义一个标记结点状态的数组、一个记录结点的值的数组、一个队列,将一开始John的坐标视为源结点,将除了源结点外的所有结点(即坐标)的状态标记为0,源结点的状态标记为1,因为该结点已被发现,同时将源结点的值(即到达该结点的时间)初始化为0。再将队列进行初始化,该队列的初始状态仅包含源结点。接下来进行循环,直到队列为空时结束:每次循环时,将队头的结点(视为父结点)取出,将其从队列中删除。再对该父结点的每个子结点(即每种移动方式所到达的结点)进行考察,若子结点的状态为0(即未被发现),则将其状态标记为1(表示已发现),同时将该子结点的值(即到达该结点的时间)设置为父结点的值+1,再将其插入队列的末尾。每次进行循环前,对牛所在结点的值进行判断,若不是初值(初值被置为-1),则表明该结点已被发现,无须再循环。

具体代码:本代码采用简洁的缩进表示方法,同时将具有关联意义的语句写在一行,具体请看代码:

 1 /*
 2 Language:C/C++
 3 Time:163ms
 4 Memory:1384k
 5 */
 6
 7 #include<stdio.h>
 8 #include<string.h>
 9 #define D 100001 //请先看主函数的代码
10 #define E if(b>=0&&b<D&&sta[b]==0){ /*判断子结点b是否超越坐标范围及入队状态*/ 11               sta[b]=1,val[b]=val[f]+1; /*标记b已入队,其值为父结点的值加1*/ 12               que[tail]=b; /*将b插入队列*/ 13               tail++;if(tail==D) tail=0;} //队尾后移,同时判断队尾是否需要循环
14 int main()
15 {
16     int n,k,f,b,val[D],que[D],head,tail;/*定义了队列的队头结点(父结点)(front),子结点(back),
17     结点的值(value)数组(用于存放到达结点(即坐标)的时间),一个队列(queue)及队头(head)队尾(tail)*/
18     char sta[D];//定义了一个结点(即坐标)的入队状态(state)数组,因为只需要标记0或1,,故用字节数最小的char类型
19     while(scanf("%d%d",&n,&k)&&n!=-1&&k!=-1){
20         val[k]=-1; //假设到达牛所在坐标的时间为-1(即结点k的值为-1)
21         memset(sta,0,sizeof(sta)); //将所有坐标点的入队状态用0标记,表示未入队
22         sta[n]=1,val[n]=0; //初始化,标记John的坐标n已入队,到达n的时间为0
23         que[0]=n,head=0,tail=1; //将n插入队列,此时队头的值为0,队尾的值为1
24         while(head!=tail&&val[k]==-1){ //当队头不等于队尾(即队列不为空)及k的值未被改变时,执行循环
25             f=que[head]; //取出队列的队头结点f
26             head++;if(head==D) head=0; //队头后移,同时判断队头是否需要循环
27             b=f+1;E //以下三行用于检测f的三个子结点b
28             b=f-1;E
29             b=2*f;E}
30         printf("%d\n",val[k]);}
31     return 0;
32 }
时间: 2024-07-28 13:07:00

捕牛记(1503)解题报告(bfs)的相关文章

OD调试篇7--笔记及解题报告

MFC:微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是一个微软公司提供的类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量.其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组 件的封装类.----名词解释 开始OD调试     目的是去除软件的使用次数限制 载入程序后F8走走看 发现了弹窗 不是进入程序的窗口   那我们F2设置断点

BZOJ 1051 最受欢迎的牛 解题报告

题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4438  Solved: 2353[Submit][Status][Discuss] Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这 种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也认为牛C受欢迎.你的任务是求出有多少头 牛被所有的牛

Codevs 1503 愚蠢的宠物 解题报告

Codevs 1503 愚蠢的宠物 解题报告 题目描述 Description 大家都知道,sheep有两只可爱的宠物(一只叫神牛,一只叫神菜).有一天,sheep带着两只宠物到狗狗家时,这两只可爱的宠物竟然迷路了-- 狗狗的家因为常常遭到猫猫的攻击,所以不得不把家里前院的路修得非常复杂.狗狗家前院有N个连通的分叉结点,且只有N-1条路连接这N个节点,节点的编号是1-N(1为根节点).sheep的宠物非常笨,他们只会向前走,不会退后(只向双亲节点走),sheep想知道他们最早什么时候会相遇(即步

暑假第二次考试 冲刺Noip2017模拟赛2 解题报告——五十岚芒果酱

题1 牛跑步(running) [题目描述] 新牛到部队,CG 要求它们每天早上搞晨跑,从 A 农场跑到 B 农场.从 A 农场到 B 农场中有 n-2 个路口,分别标上号,A 农场为 1 号,B 农场为 n 号,路口分别为 2...n-1 号,从 A 农场到 B 农场有很多条路径可以到达,而 CG 发现有的路口是必须经过的,即每条路径都经过的路口,CG 要把它们记录下来,这样 CG 就可以先到那个路口,观察新牛们有没有偷懒,而你的任务就是找出所有必经路口. [输入格式] 第一行两个用空格隔开的

NOIP 2003解题报告

第一题(神经网络): 题目大意,给出一些点,每个点都有2个值,c和u,给出一些有向边,权值为w.入度为0的点的c已知,其它点的c未知,每个入度不为0的点node的c等于sum(c[k]*w[k][node]),k为与它相连(有向边指向node)的点.求所有出度为0且c>0的点. 解题过程: 此题的方法应该很多,比如拓扑排序,BFS等:我直接写了个递归,要求某个点的c,就先访问所有与它相连的点,递归下去直到 碰到入度为0的点.. 较麻烦的送分题,30分钟AC 第二题(侦探推理): 明明同学最近迷上

解题报告 之 POJ2391 Ombrophobic Bovines

解题报告 之 POJ2391 Ombrophobic Bovines Description FJ's cows really hate getting wet so much that the mere thought of getting caught in the rain makes them shake in their hooves. They have decided to put a rain siren on the farm to let them know when rai

解题报告 之 SOJ2835 Pick Up Points

解题报告 之 SOJ2835 Pick Up Points Description Description Recently loy are very interested in playing a funny game. There is a board of n*m grid. Each grid has one point or not. If two adjacency grids both have one point, someone can pick them up, and th

解题报告 之 POJ3281 Dining

解题报告 之 POJ3281 Dining Description Cows are such finicky eaters. Each cow has a preference for certain foods and drinks, and she will consume no others. Farmer John has cooked fabulous meals for his cows, but he forgot to check his menu against their

2020-3-14 acm训练联盟周赛Preliminaries for Benelux Algorithm Programming Contest 2019 解题报告+补题报告

2020-3-15比赛解题报告+2020-3-8—2020-3-15的补题报告 2020-3-15比赛题解 训练联盟周赛Preliminaries for Benelux Algorithm Programming Contest 2019  A建筑(模拟) 耗时:3ms 244KB 建筑 你哥哥在最近的建筑问题突破大会上获得了一个奖项 并获得了千载难逢的重新设计城市中心的机会 他最喜欢的城市奈梅根.由于城市布局中最引人注目的部分是天际线, 你的兄弟已经开始为他想要北方和东方的天际线画一些想法