/*
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如果