广度搜索(BFS)入门题目:抓住那头牛

这篇博客介绍了作者在学习广度搜索(BFS)过程中遇到的经典题目——抓住那头牛,并分享了解题思路。文章讨论了如何在BFS中记录步数,提出通过数组step[i]来跟踪每个位置的步数,帮助初学者理解BFS。博主还提供了相关代码,希望能对其他初学者有所帮助。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚学广搜没多久,刷了一些广搜的题,发现了这道抓住那头牛(原版英文题:Catch that cow)


这是一道很经典的广搜题,做完之后发现挺不错的,属于广搜的简单题,但对广搜不熟又做不出来。


刚开始学广搜的时候可能会有些不理解,慢慢学习后掌握广搜的基本思路,新学者可能会产生一个疑问(至少我是有疑问的):怎么记录步数(在DFS中是一步步走的所以步数记录比较简单),其实后来想想可以开一个数组step[i]表示搜到i位置时已走的步数,问题就愉快的解决了。


写这篇博客记录一下我的学习经历,如果有和我一样的初学者,也希望我的博客解决你的一些问题,那是再好不过的了。


代码送上大笑

#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int n,k;
int nf[1000000];
int step[1000000];
bool hav[1000000];
int main(){
	scanf("%d%d",&n,&k);
	nf[1]=n;
	hav[n]=1;
	int head=1,tail=2;
	while(head<=tail)
	{
		if(nf[head]+1==k||nf[head]-1==k||nf[head]*2==k)
		{
			printf("%d",step[head]+1);
			return 0;
		}
		if(hav[nf[head]+1]==0&&nf[head]+1&
数据结构是计算机科学的核心领域之一,涵盖了数据的组织、存储、检索及操作方法。为了更好地掌握数据结构的相关知识,习题练习是不可或缺的一环。以下是一些关于数据结构练习题和习题集的资源与建议。 ### 数据结构练习题资源 1. **基础章节练习题** 针对数据结构的基础章节(如数组、指针、链表等),可以参考类似《数据结构C语言版》的章节练习题。这些题目涵盖单选题、时间复杂度分析、链表操作等核心知识点。例如,单链表插入操作的选择题可以帮助理解链表的动态结构和指针操作[^1]。 2. **全面数据结构练习题集** 一套全面的练习题集应涵盖基础数据结构(数组、链表、栈、队列)和高级数据结构(树、图、散列表),同时结合排序与查找算法。这些习题能够帮助学习者深入理解数据结构的应用场景,并分析算法的时间与空间复杂度。通过系统的练习,学生可以提升编程能力和解决实际问题的能力[^2]。 3. **数据结构实战练习题集** 实战题集强调通过实践巩固理论知识。题集内容通常包括数组的内存分配、访问效率、链表操作、树和图的遍历算法等。此外,实战题集还可能涉及算法优化问题,例如最小生成树、最短路径等经典问题。通过这些题目,学习者可以深入掌握数据结构的特性及其在实际开发中的应用[^3]。 4. **图的专项练习题** 图是数据结构中的重要部分,专项练习题通常包括广度优先遍历(BFS)、深度优先遍历(DFS)、图的邻接矩阵表示、最短路径算法(如Dijkstra算法)、最小生成树算法(如Prim算法和Kruskal算法)等。例如,判断一个连通图至少需要多少条边,或者计算特定边权值下最小生成树是否唯一等题目[^4]。 ### 数据结构习题集推荐 1. **教材配套习题集** 推荐使用《数据结构(C语言版)》或《数据结构与算法分析》等经典教材,这些教材通常附带章节练习题和详细解析,适合初学者和进阶学习者。 2. **在线资源** - **LeetCode**:提供大量与数据结构相关的编程题目,涵盖数组、链表、树、图等结构,适合提升编程能力。 - **牛客网**:提供算法和数据结构专项练习,同时包含企业面试真题。 - **PTA(程序设计类实验辅助系统)**:提供数据结构专项练习题库,适合系统性地学习和巩固知识。 3. **专项练习册** 可以选择一些专项练习册,例如《剑指Offer》中的数据结构题目,或者《算法竞赛入门经典》中的习题集,这些资源对算法设计和数据结构应用有较高要求。 ### 示例代码:链表插入操作 ```c // 单链表节点定义 typedef struct Node { int data; struct Node *next; } Node; // 在头节点HL后插入节点p void insert(Node* HL, Node* p) { p->next = HL->next; HL->next = p; } ``` ### 示例代码:图的广度优先遍历(BFS) ```python from collections import deque def bfs(graph, start): visited = set() queue = deque([start]) while queue: vertex = queue.popleft() if vertex not in visited: visited.add(vertex) queue.extend(graph[vertex] - visited) return visited ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值