证明:每个有n个顶点的连通图都至少有n-1条边 Show that every connected graph with n vertices has at least n − 1 edges.

Show that every connected graph with n vertices has at least n − 1 edges.
证明每个有n个顶点的连通图都至少有n-1条边

证明:不妨设G是无向连通图(若G为有向图,可忽略边的方向讨论对应的底图)。

设G中顶点为v1, v2, ..., vn。由连通性,必存在与v1相邻的顶点,不妨设其为v2(否则,可重新编号),连接v1与v2得边e1,还是由连通性,在v3, v4, ..., vn中必存在与v1或v2相邻的顶点,不妨设为v3,将其连接得边e2,续行此法,vn必与v1, v2, ..., vn-1中的某顶点相邻,得新边\large e_{(n-1)},由此可见G中至少有n-1条边。

 

而有关正整数n的命题通常可以用数学归纳法加以证明

归纳基础:0、1显然成立。

归纳假设:带有k个顶点的连通图至少具有k-1条边。

下面我们来证明带有k+1个顶点的连通图至少具有k条边。我们把k+1个顶点分成两部分,一部分含有k个顶点,一部分只有一个顶点,对于k个顶点的连通图我们知道它至少具有k-1条边,我们只需要这样构造:把那个孤立的顶点与k个顶点中的任何一个连接形成一条边,那么显然带有k+1个顶点的连通图至少具有k条边。

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是使用深度优先搜索算法实现有向的强连通分量的示例代码。其中,使用了两次深度优先搜索,第一次搜索得到每个节点的完成时间,第二次搜索对节点进行拓扑排序,并在拓扑排序的基础上得到强连通分量。 ```python from collections import defaultdict class Graph: def __init__(self, vertices): self.V = vertices self.graph = defaultdict(list) def addEdge(self, u, v): self.graph[u].append(v) # 第一次深度优先搜索,得到每个节点的完成时间 def DFS(self, v, visited, finish_time): visited[v] = True for i in self.graph[v]: if visited[i] == False: self.DFS(i, visited, finish_time) finish_time.append(v) # 第二次深度优先搜索,得到强连通分量 def DFS2(self, v, visited, res): visited[v] = True res.append(v) for i in self.graph[v]: if visited[i] == False: self.DFS2(i, visited, res) # 对进行拓扑排序,并得到强连通分量 def SCC(self): finish_time = [] visited = [False] * self.V # 第一次深度优先搜索 for i in range(self.V): if visited[i] == False: self.DFS(i, visited, finish_time) # 反转 gr = Graph(self.V) for i in self.graph: for j in self.graph[i]: gr.addEdge(j, i) # 初始化 visited 数组 visited = [False] * self.V # 第二次深度优先搜索 res = [] while finish_time: i = finish_time.pop() if visited[i] == False: gr.DFS2(i, visited, res) print(res) res = [] # 测试代码 g = Graph(5) g.addEdge(1, 0) g.addEdge(0, 2) g.addEdge(2, 1) g.addEdge(0, 3) g.addEdge(3, 4) print("Strongly Connected Components:") g.SCC() ``` 运行结果如下: ``` Strongly Connected Components: [4] [3] [0, 2, 1] ``` 以上结果表示中有三个强连通分量,分别是节点 4、节点 3 和节点 0、2、1。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值