欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python基于回溯法子集樹模板解決m著色問題示例

 更新時間:2017年09月07日 10:44:41   作者:羅兵  
這篇文章主要介紹了Python基于回溯法子集樹模板解決m著色問題,簡單描述了m著色問題并結合實例形式分析了Python使用回溯法子集樹模板解決m著色問題的具體步驟與相關操作注意事項,需要的朋友可以參考下

本文實例講述了Python基于回溯法子集樹模板解決m著色問題。分享給大家供大家參考,具體如下:

問題

圖的m-著色判定問題

給定無向連通圖G和m種不同的顏色。用這些顏色為圖G的各頂點著色,每個頂點著一種顏色,是否有一種著色法使G中任意相鄰的2個頂點著不同顏色?

圖的m-著色優(yōu)化問題

若一個圖最少需要m種顏色才能使圖中任意相鄰的2個頂點著不同顏色,則稱這個數(shù)m為該圖的色數(shù)。求一個圖的最小色數(shù)m的問題稱為m-著色優(yōu)化問題。

分析

解的長度是固定的,n。若x為本問題的一個解,則x[i]表示第i個節(jié)點的涂色編號。

可以將m種顏色看作每個節(jié)點的狀態(tài)空間。每到一個節(jié)點,遍歷所有顏色,剪枝,回溯。

不難看出,可以套用回溯法子集樹模板。

代碼

'''圖的m著色問題'''
# 用鄰接表表示圖
n = 5 # 節(jié)點數(shù)
a,b,c,d,e = range(n) # 節(jié)點名稱
graph = [
  {b,c,d},
  {a,c,d,e},
  {a,b,d},
  {a,b,c,e},
  {b,d}
]
m = 4 # m種顏色
x = [0]*n # 一個解(n元數(shù)組,長度固定)注意:解x的下標就是a,b,c,d,e!!!
X = []   # 一組解
# 沖突檢測
def conflict(k):
  global n,graph,x
  # 找出第k個節(jié)點前面已經(jīng)涂色的鄰接節(jié)點
  nodes = [node for node in range(k) if node in graph[k]]
  if x[k] in [x[node] for node in nodes]: # 已經(jīng)有相鄰節(jié)點涂了這種顏色
    return True
  return False # 無沖突
# 圖的m著色(全部解)
def dfs(k): # 到達(解x的)第k個節(jié)點
  global n,m,graph,x,X
  if k == n: # 解的長度超出
    print(x)
    #X.append(x[:])
  else:
    for color in range(m): # 遍歷節(jié)點k的可涂顏色編號(狀態(tài)空間),全都一樣
      x[k] = color
      if not conflict(k): # 剪枝
        dfs(k+1)
# 測試
dfs(a)  # 從節(jié)點a開始

效果圖

更多關于Python相關內(nèi)容可查看本站專題:《Python數(shù)據(jù)結構與算法教程》、《Python Socket編程技巧總結》、《Python函數(shù)使用技巧總結》、《Python字符串操作技巧匯總》、《Python入門與進階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對大家Python程序設計有所幫助。

相關文章

  • 基于Python的XML格式的文件示例代碼詳解

    基于Python的XML格式的文件示例代碼詳解

    這篇文章主要介紹了基于Python的XML格式的文件示例代碼詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • 詳解Python中使用base64模塊來處理base64編碼的方法

    詳解Python中使用base64模塊來處理base64編碼的方法

    8bit的bytecode經(jīng)常會被用base64編碼格式保存,Python中自帶base64模塊對base64提供支持,這里我們就來詳解Python中使用base64模塊來處理base64編碼的方法,需要的朋友可以參考下
    2016-07-07
  • Python在信息學競賽中的運用及Python的基本用法(詳解)

    Python在信息學競賽中的運用及Python的基本用法(詳解)

    下面小編就為大家?guī)硪黄狿ython在信息學競賽中的運用及Python的基本用法(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 手把手教你Windows如何在cmd中切換python版本

    手把手教你Windows如何在cmd中切換python版本

    通常在Windows系統(tǒng)下我們可能安裝了多個Python版本,那么該如何進行版本的切換呢?下面這篇文章主要給大家介紹了關于Windows如何在cmd中切換python版本的相關資料,需要的朋友可以參考下
    2023-04-04
  • Python sklearn庫實現(xiàn)PCA教程(以鳶尾花分類為例)

    Python sklearn庫實現(xiàn)PCA教程(以鳶尾花分類為例)

    今天小編就為大家分享一篇Python sklearn庫實現(xiàn)PCA教程(以鳶尾花分類為例),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 基于Python繪制世界疫情地圖詳解

    基于Python繪制世界疫情地圖詳解

    這篇文章主要介紹了如何使用Python繪制世界疫情地圖,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • python3簡單實現(xiàn)微信爬蟲

    python3簡單實現(xiàn)微信爬蟲

    我們可以通過python 來實現(xiàn)這樣一個簡單的爬蟲功能,把我們想要的代碼爬取到本地。下面就看看如何使用python來實現(xiàn)這樣一個功能。
    2015-04-04
  • pandas常用表連接merge/concat/join/append詳解

    pandas常用表連接merge/concat/join/append詳解

    使用python的pandas庫可以很容易幫你搞定,而且性能也是很出色的;百萬級的表關聯(lián),可以秒出,本文給大家分享pandas常用表連接merge/concat/join/append詳解,感興趣的朋友跟隨小編一起看看吧
    2023-02-02
  • python3+PyQt5實現(xiàn)自定義窗口部件Counters

    python3+PyQt5實現(xiàn)自定義窗口部件Counters

    這篇文章主要為大家詳細介紹了python3+PyQt5實現(xiàn)自定義窗口部件,Counters自定窗口部件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • python實現(xiàn)得到一個給定類的虛函數(shù)

    python實現(xiàn)得到一個給定類的虛函數(shù)

    這篇文章主要介紹了python實現(xiàn)得到一個給定類的虛函數(shù)的方法,以wx的PyPanel類為例講述了打印以base_開頭的方法的實例,需要的朋友可以參考下
    2014-09-09

最新評論