博客
关于我
Objective-C实现articulation-points(关键点)(割点)算法(附完整源码)
阅读量:795 次
发布时间:2023-02-17

本文共 1832 字,大约阅读时间需要 6 分钟。

Objective-C 实现割点算法

在图论中,割点(Articulation Point)是描述在连通图中,移除某个顶点及其相关边后,图的连通性发生变化的点。以下是 Objective-C 中实现割点算法的完整代码示例。

#import   @interface Graph : NSObject @property (nonatomic, strong) NSMutableArray *vertices; @property (nonatomic, strong) NSMutableArray *edges; @property (nonatomic, strong) NSMutableArray *adjacencyList;
// 初始化图的顶点和边
-(void)initializeGraph
{
self.vertices = [NSMutableArray new];
self.edges = [NSMutableArray new];
self.adjacencyList = [NSMutableArray new];
}

// 添加顶点    -(void)addVertex:(id)vertex    {        [self.vertices addObject:vertex];    }      // 添加边    -(void)addEdge:(id)edge fromVertex:(id)from toVertex:(id)to    {        [self.edges addObject:edge];        [self.adjacencyList[fromVertex] addObject:toVertex];        [self.adjacencyList[toVertex] addObject:fromVertex];    }      //DFS 遍历并找出割点    -(NSArray *)findArticulationPoints    {        NSMutableArray *points = [NSMutableArray new];        [self dfs:0 visited:[NSMutableArray new] disc:[NSMutableArray new] low:[NSMutableArray new]];        return points;    }      //DFS 记录    -(void)dfs:(int)u visited:(NSMutableArray *)visited disc:(NSMutableArray *)disc low:(NSMutableArray *)low    {        visited[u] = YES;        disc[u] = [NSDate timeIntervalSinceReferenceDate];        low[u] = disc[u];              for (id v in self.adjacencyList[u])        {            if (!visited[v])            {                [self dfs:v visited:visited disc:disc low:low];                low[u] = [low[u] < low[v]] ? low[u] : low[v];            }            else if (v != parent[u])            {                low[u] = [low[u] < disc[v]] ? low[u] : disc[v];            }        }              if (low[u] > disc[u])        {            [points addObject:u];        }    }    

该代码实现了通过深度优先搜索(DFS)来识别图中的割点。通过记录每个顶点的访问时间(disc)和低值(low),算法可以判断移除某个顶点后对图的连通性是否有影响。

转载地址:http://vbnfk.baihongyu.com/

你可能感兴趣的文章
Objective-C实现detectDirectedCycle检测定向循环算法(附完整源码)
查看>>
Objective-C实现detectUndirectedCycle检测无向循环算法(附完整源码)
查看>>
Objective-C实现deutsch jozsa算法(附完整源码)
查看>>
Objective-C实现DFS判断是否是二分图Bipartite算法(附完整源码)
查看>>
Objective-C实现DFS遍历或搜索图数据结构算法(附完整源码)
查看>>
Objective-C实现Diffie-Hellman算法(附完整源码)
查看>>
Objective-C实现Diffie—Hellman密钥交换(附完整源码)
查看>>
Objective-C实现Diffie—Hellman密钥交换(附完整源码)
查看>>
Objective-C实现Dijkstra最小路径算法(附完整源码)
查看>>
Objective-C实现dijkstra迪杰斯特拉算法(附完整源码)
查看>>
Objective-C实现dijkstra迪杰斯特拉算法(附完整源码)
查看>>
Objective-C实现Dijkstra迪杰斯特拉算法(附完整源码)
查看>>
Objective-C实现dijkstra银行家算法(附完整源码)
查看>>
Objective-C实现Dinic算法(附完整源码)
查看>>
Objective-C实现disjoint set不相交集算法(附完整源码)
查看>>
Objective-C实现DisjointSet并查集的算法(附完整源码)
查看>>
Objective-C实现djb2哈希算法(附完整源码)
查看>>
Objective-C实现DNF排序算法(附完整源码)
查看>>
Objective-C实现doomsday末日算法(附完整源码)
查看>>
Objective-C实现double factorial iterative双阶乘迭代算法(附完整源码)
查看>>