博客
关于我
Objective-C实现articulation-points(关键点)(割点)算法(附完整源码)
阅读量:799 次
发布时间: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实现nevilles method多项式插值算法(附完整源码)
查看>>
Objective-C实现newton raphson牛顿-拉夫森算法(附完整源码)
查看>>
Objective-C实现newtons second law of motion牛顿第二运动定律算法(附完整源码)
查看>>
Objective-C实现newton_forward_interpolation牛顿前插算法(附完整源码)
查看>>
Objective-C实现newton_raphson牛顿拉夫森算法(附完整源码)
查看>>
Objective-C实现ngram语言模型算法(附完整源码)
查看>>
Objective-C实现NLP中文分词(附完整源码)
查看>>
Objective-C实现NLP中文分词(附完整源码)
查看>>
Objective-C实现NMS非极大值抑制(附完整源码)
查看>>
Objective-C实现NMS非极大值抑制(附完整源码)
查看>>
Objective-C实现Node.Js中生成一个UUID/GUID算法(附完整源码)
查看>>
Objective-C实现not gate非门算法(附完整源码)
查看>>
Objective-C实现NQueen皇后问题算法(附完整源码)
查看>>
Objective-C实现number of digits解字符数算法(附完整源码)
查看>>
Objective-C实现NumberOfIslands岛屿的个数算法(附完整源码)
查看>>
Objective-C实现numerical integration数值积分算法(附完整源码)
查看>>
Objective-C实现n个取m个数的组合算法(附完整源码)
查看>>
Objective-C实现N数理论(质素相关)算法(附完整源码)
查看>>
Objective-C实现n皇后问题算法(附完整源码)
查看>>
Objective-C实现O(E + V) 中找到 0-1-graph 中的最短路径算法(附完整源码)
查看>>