Top.Mail.Ru
Ответы

Алгоритм раскраски графа на Python

Добрый день!
Мне нужно срочно выполнить задачу. Я посчитал данные из файлов task1 и task2, построил таблицы смежности, но при попытке раскрасить, у меня выходит ошибка:
Traceback (most recent call last):
File "C:\Users\АНДРЕЙ\Desktop\Раскраска графа\graph2.py", line 60, in
print(graphColouring(graph1))
File "C:\Users\АНДРЕЙ\Desktop\Раскраска графа\graph2.py", line 16, in graphColouring
if not loop(n1):
File "C:\Users\АНДРЕЙ\Desktop\Раскраска графа\graph2.py", line 9, in loop
if rw[t][n] == 1:
IndexError: string index out of range.
Как это исправить?
Код программы:
def graphColouring(graph):
coloured = [[]]
colour = 0
stack = []
n1 = -1
n2 = -1
def loop(n):
for t in coloured[colour]:
if rw[t][n] == 1:
return False
return True

for a in rw:
n1 += 1
if n1 not in stack:
if not loop(n1):
coloured.append([])
colour += 1
stack.append(n1)
coloured[colour].append(n1)
n2 = n1
for b in a[n1:]:
if b == 0 and n2 not in stack and loop(n2):
stack.append(n2)
coloured[colour].append(n2)
n2 += 1
return coloured
# =====================================================
with open('task1.txt', 'r') as f: # Открыть первый файл
graph1 = {}
n = 0
for i in f.readlines(): # Считывание данных
ns = i.split(" ")
n1 = int(ns[0])
n2 = int(ns[1])
if n < n1 and n1 > n2:
n = n1
if n < n2 and n2 > n1:
n = n2
if n1 not in list(graph1):
graph1[n1] = []
adjacencyList = graph1[n1]
adjacencyList.append(n2)
graph1[n1] = adjacencyList

adjacencyMatrix = []
for i in range(1, n + 1):
rw = []
for j in range(1, n + 1):
if i in list(graph1) and j in graph1[i]:
rw.append(1)
else:
rw.append(0)
adjacencyMatrix.append(rw)

for i in range(n):
rw = ""
for j in range(n):
rw += str(adjacencyMatrix[i][j]) + " "
print(graphColouring(graph1))

with open('task2.txt', 'r') as f: # Открыть второй файл
graph2 = {}
n = 0
for i in f.readlines(): # Считывание данных
ns = i.split(" ")
n1 = int(ns[0])
n2 = int(ns[1])
if n < n1 and n1 > n2:
n = n1
if n < n2 and n2 > n1:
n = n2
if n1 not in list(graph2):
graph2[n1] = []
adjacencyList = graph2[n1]
adjacencyList.append(n2)
graph2[n1] = adjacencyList

adjacencyMatrix = []
for i in range(1, n + 1):
rw = []
for j in range(1, n + 1):
if i in list(graph2) and j in graph2[i]:
rw.append(1)
else:
rw.append(0)
adjacencyMatrix.append(rw)

for i in range(n):
rw = ""
for j in range(n):
rw += str(adjacencyMatrix[i][j]) + " "
#print(rw)

По дате
По рейтингу
Аватар пользователя
Ученик

Удалите питон