使用 Python 查找无向图中是否存在给定大小的独立集


假设我们有一个给定的无向图;我们需要检查它是否包含大小为 l 的独立集。如果存在大小为 l 的独立集,则返回“Yes”,否则返回“No”。

我们需要记住,图中的独立集定义为一组顶点,这些顶点彼此之间没有直接连接。

所以,如果输入类似于 L = 4,

那么输出将是 yes

为了解决这个问题,我们将遵循以下步骤:

  • 定义一个函数 is_valid()。它将接收图和数组 arr 作为参数。

  • 从 i = 0 到 arr 的大小循环:

    • 从 j = i + 1 到 arr 的大小循环:

      • 如果 graph[arr[i], arr[j]] 等于 1,则:

        • 返回 False

  • 返回 True

  • 定义一个函数 solve()。它将接收图、数组 arr、k、索引 index 和数组 sol 作为参数。

  • 如果 k 等于 0,则:

    • 如果 is_valid(graph, arr) 等于 True,则:

      • sol[0] := True

      • 返回

    • 否则,

      • 如果 index >= k,则:

        • 返回 (solve(graph, arr[从索引 0 到结束] 连接一个包含 [index] 的列表, k-1, index-1, sol) 或 solve(graph, arr[从索引 0 到结束], k, index-1, sol))

      • 否则,

        • 返回 solve(graph, arr[从索引 0 到结束] 连接一个包含 [index] 的列表, k-1, index-1, sol)

示例

让我们看看以下实现,以更好地理解:

 在线演示

def is_valid(graph, arr):
   for i in range(len(arr)):
      for j in range(i + 1, len(arr)):
         if graph[arr[i]][arr[j]] == 1:
            return False
   return True
def solve(graph, arr, k, index, sol):
   if k == 0:
      if is_valid(graph, arr) == True:
         sol[0] = True
         return
      else:
         if index >= k:
            return (solve(graph, arr[:] + [index], k-1, index-1, sol) or solve(graph, arr[:], k, index-1, sol))
         else:
            return solve(graph, arr[:] + [index], k-1, index-1, sol)

graph = [
   [1, 1, 0, 0, 0],
   [1, 1, 1, 1, 1],
   [0, 1, 1, 0, 0],
   [0, 1, 0, 1, 0],
   [0, 1, 0, 0, 1]]
k = 4
arr = []
sol = [False]
solve(graph, arr[:], k, len(graph)-1, sol)
if sol[0]:
   print("Yes")
else:
   print("No")

输入

[[1, 1, 0, 0, 0],
[1, 1, 1, 1, 1],
[0, 1, 1, 0, 0],
[0, 1, 0, 1, 0],
[0, 1, 0, 0, 1]],
4

输出

Yes

更新于: 2020年8月25日

238 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.