算法设计与分析:第六章 图 6.1单点失败

本文详细介绍了图的单点故障(SPF)算法设计,通过头插法建立邻接表,利用深度优先搜索遍历并判断节点是否为割点。通过对每个节点的子节点进行递归操作,统计子网数量,以此识别网络中的关键节点。
摘要由CSDN通过智能技术生成
/*
SPF:
关键:
1统计孩子结点个数,其实存在几个孩子,就说明存在几个划分
2每次对进入的孩子结点设置为已经访问
3对结点进行根节点/非根节点的是否回溯的更新
4对是否是割点的情况进行讨论
5p指向下一个为b,b自己为p,因为这里存储的是头结点,不是该结点本身
这是一个单链表的尾插法建立问题:
nodeArr[i]是头指针,下面存储的v是自己i,但是next是下一条边
尾插法核心算法:
pNode = new Node;
pNode->v = 1;
pCurNode->next = pNode;
pCurNode = pNode;

头插法核心算法:
pNode = new Node;
pNode->v = 1;
p->next = head;
head = p;

因此本文中使用
Node* _pNodeA = new Node;
_pNodeA->_iVal = a;//存储自己本身的值,作为头结点
_pNodeA->_pNext = _nodeArr[b];//指向头结点
_nodeArr[b] = _pNodeA;//头结点为新产生的结点指针,自己原来的信息已经链入到该新节点指向的后继结点中,用于头插法建立

本题中采用建立邻接表的方法为头插法



1 2
5 4
3 1
3 2
3 4
3 5
0

1 2
2 3
3 4
4 5
5 1
0

1 2
2 3
3 4
4 6
6 3
2 5
5 1
0

0
Sample Output
Network #1
  SPF node 3 leaves 2 subnets

Network #2
  No SPF nodes

Network #3
  SPF node 2 leaves 2 subnets
  SPF node 3 leaves 2 subnets
*/

/*
关键点:
1 算法流程:
//1初始时,另pre[v]=back[v]均为先序遍历时的序号
//2遍历结点v的所有子节点,如果该子节点没有访问过,转步骤3,;否则转步骤6
//3如果对于树边<u,w>,有back[w] < back[v],那么更新back[v] = back[w]。
//4判断,如果当前结点为根节点,并且该根节点含有至少两个子节点,那么该根节点必为接合点;否则,转步骤4
//5当前结点不是根节点,并且有pre[v]<=back[v],那么该结点也是接合点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值