解答 def can_traverse_all_bridges(n, m, bridges): from collections import defaultdict # 計算每個頂點的度數 degree = defaultdict(int) for a, b in bridges: degree[a] += 1 degree[b] += 1 # 計算奇頂點的數量 odd_count = sum(1 for d in degree.values() if d % 2 != 0) # 如果奇頂點的數量超過兩個,返回NO,否則返回YES return "NO" if odd_count > 2 else "YES" # 讀取輸入 import sys input = sys.stdin.read data = input().split() n = int(data[0]) m = int(data[1]) bridges = [] index = 2 for _ in range(m): a = int(data[index]) b = int(data[index + 1]) bridges.append((a, b)) index += 2 # 輸出結果 print(can_traverse_all_bridges(n, m, bridges)) |
思路 柯尼斯堡七橋問題
柯尼斯堡七橋問題是一個著名的圖論問題,源自現實生活中的一個實例。問題的核心是:在所有橋都只能走一遍的前提下,是否能把這個地方所有的橋都走遍?
問題描述
在柯尼斯堡這個城市,河流將城市分成了若干個地區,並且這些地區之間有若干座橋相連。問題要求判斷是否存在一條路徑,可以在不重複走任何一座橋的情況下,遍歷所有的橋。
歐拉的解法
萊昂哈德·歐拉在1736年提出了解決這個問題的方法,並將其簡化為圖論中的問題。具體方法如下:
輸入輸出說明
輸入
輸出
|