回溯演算法——圖著色
阿新 • • 發佈:2020-11-26
""" # @Time : 2020/11/26 # @Author : Jimou Chen """ ''' 輸入n個頂點,m種顏色,還有該圖的鄰接矩陣 假設第一個頂點是1,第一種顏色是1 ''' n, m = map(int, input().split()) graph = [[0 for _ in range(100)] for _ in range(100)] # 存放鄰接矩陣 color = [0 for _ in range(100)] # 存放最後符合著色情況 cnt = 0 # 記錄有多少種著色方案 # 檢查第i個頂點的顏色是否滿足條件 def check(k): for i in range(1, k + 1): # k與i之間相連並且i頂點的顏色與k頂點的顏色相同 if graph[k][i] == 1 and color[i] == color[k]: return 0 return 1 def dfs(step): global cnt # 所有的頂點已經塗完顏色 if step == n + 1: for i in range(1, n + 1): print(color[i], end=' ') print() cnt += 1 return # 遍歷填m種顏色 for i in range(1, m + 1): color[step] = i if check(step): dfs(step + 1) color[step] = 0 # 回溯,0表示沒有著色 if __name__ == '__main__': for i in range(1, n + 1): temp = list(map(int, input().split())) for j in range(1, n + 1): graph[i][j] = temp[j - 1] dfs(1) print('總方案數: ', cnt) ''' 5 4 0 1 1 1 0 1 0 1 1 1 1 1 0 1 0 1 1 1 0 1 0 1 0 1 0 48 '''