สมมติว่าเรามีกราฟที่ไม่ได้บอกทิศทาง เราต้องตรวจสอบว่ามีชุดขนาด l อิสระหรือไม่ หากมีชุดขนาดอิสระใด ๆ ให้ส่งคืนใช่มิฉะนั้นไม่ใช่
เราต้องจำไว้ว่าชุดอิสระในกราฟถูกกำหนดให้เป็นชุดของจุดยอดซึ่งไม่ได้เชื่อมต่อกันโดยตรง
ดังนั้น หากอินพุตเป็น L =4

แล้วผลลัพธ์จะเป็นใช่
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดฟังก์ชัน is_valid() นี่จะเป็นกราฟ arr
-
สำหรับฉันในช่วง 0 ถึงขนาดของ arr ทำ
-
สำหรับ j ในช่วง i + 1 ถึงขนาดของ arr ทำ
-
ถ้า graph[arr[i], arr[j]] เหมือนกับ 1 แล้ว
-
คืนค่าเท็จ
-
-
-
-
คืนค่า True
-
กำหนดฟังก์ชัน Solve() จะได้กราฟ arr k ดัชนี โซล
-
ถ้า k เท่ากับ 0 แล้ว
-
ถ้า is_valid(graph, arr) เหมือนกับ True แล้ว
-
sol[0] :=จริง
-
กลับ
-
-
มิฉะนั้น
-
ถ้าดัชนี>=k แล้ว
-
return(แก้(กราฟ, arr[จากดัชนี 0 ถึงสิ้นสุด] เชื่อมรายการด้วย [ดัชนี], k-1, ดัชนี-1, โซล) หรือแก้(กราฟ, arr[จากดัชนี 0 ถึงจุดสิ้นสุด], k, ดัชนี- 1 โซล))
-
-
มิฉะนั้น
-
return Solve(กราฟ, arr[จากดัชนี 0 ถึงปลาย] เชื่อมรายการด้วย [ดัชนี], k-1, ดัชนี-1, โซล)
-
-
-
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
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