
Objective-C实现深度优先搜索迭代算法(附完整源码)
初始化栈:将起始节点推入栈中。 设置访问标记:记录已经访问过的节点,避免重复访问。 遍历节点:从栈顶部取出节点,访问该节点的所有未被访问的邻居,并将这些邻居依次推入栈中。 终止条件:当栈为空时,DFS 遍历完成。
发布日期:2025-04-26 23:07:43
浏览次数:3
分类:精选文章
本文共 2498 字,大约阅读时间需要 8 分钟。
Objective-C 中实现深度优先搜索(DFS)迭代算法
深度优先搜索(DFS)是一种常见的图遍历算法,其核心思想是从图的起点出发,尽可能深入地访问每一个节点,直到无法继续为止。在本文中,我们将使用 Objective-C 语言,通过栈数据结构来实现 DFS 算法。
算法概述
DFS 算法主要通过递归或迭代的方式遍历图的所有节点。与广度优先搜索(BFS)相比,DFS 更注重探索路径的深度。以下是 DFS 算法的基本步骤:
核心实现代码
#import@interface Node : NSObject@property (nonatomic, strong) NSString *value;@property (nonatomic, strong) NSArray *neighbors;@property (nonatomic, assign) bool visited;@end@implementation Node@end@interface DFSAlgorithm : NSObject@property (nonatomic, strong) Node *startNode;@property (nonatomic, strong) NSMutableArray *stack;@property (nonatomic, strong) NSMutableArray *visitedNodes;- (void)performDFS;- (void)visitNode:(Node *)node;- (void)pushNeighborsToStack:(Node *)node;@end@implementation DFSAlgorithm- (void)performDFS { self.stack = [NSMutableArray new]; self.visitedNodes = [NSMutableArray new]; [self visitNode:self.startNode];}- (void)visitNode:(Node *)node { node.visited = true; [self pushNeighborsToStack:node]; while ([self.stack count] > 0) { Node *currentNode = [self.stack lastObject]; [self.stack removeLast]; for (Node *neighbor in currentNode.neighbors) { if (!neighbor.visited) { [self.stack push:neighbor]; [self visitNode:neighbor]; } } }}- (void)pushNeighborsToStack:(Node *)node { for (Node *neighbor in node.neighbors) { if (!neighbor.visited) { [self.stack push:neighbor]; } }}@end
代码解释
Node 类:
- 定义了节点的属性,包括节点值和邻接节点列表。
- 提供了一个
visited
标记来跟踪节点是否已被访问。
DFSAlgorithm 类:
- 包含了 DFS 的核心逻辑。
performDFS
方法初始化栈和访问记录,并开始 DFS 遍历。visitNode
方法处理当前节点,标记为已访问,并将其邻接节点推入栈中。pushNeighborsToStack
方法将当前节点的邻接节点推入栈中,确保按顺序处理。
使用示例
// 创建节点Node *node1 = [[Node alloc] init];node1.value = @"节点1";node1.neighbors = [@["节点2"]];Node *node2 = [[Node alloc] init];node2.value = @"节点2";node2.neighbors = [@["节点3", "节点4"]];Node *node3 = [[Node alloc] init];node3.value = @"节点3";node3.neighbors = [@["节点4"]];Node *node4 = [[Node alloc] init];node4.value = @"节点4";node4.neighbors = [@[]];// 初始化 DFS 算法DFSAlgorithm *dfs = [[DFSAlgorithm alloc] init];dfs.startNode = node1;// 开始 DFS 遍历[dfs performDFS];
测试结果
运行上述代码,DFS 算法将依次访问节点1、节点2、节点3、节点4,完成整个图的遍历。栈中的操作确保了 DFS 的正确性。
总结
通过上述实现,我们可以清晰地看到 DFS 算法的核心逻辑。通过栈结构来管理遍历顺序,确保了深度优先的特性。这种方法适用于各种图的遍历任务,能够有效地展开节点的访问路径。
发表评论
最新留言
不错!
[***.144.177.141]2025年04月11日 23时10分27秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!