У меня есть проблема, когда мне нужно, учитывая, что граф находит минимальное количество ребер, необходимых для каждой вершины, связанной, по крайней мере, с одной. Чтобы решить эту проблему, я попытался сделать этот метод в псевдокоде:Свяжите все точки, по крайней мере, еще один на графике
getEdgesCount(listOfPoints):
linkedPoints = set()
edgeCount = 0
for point in listOfPoints:
alternative = None
best = None
foundEdge = false
if point not in linkedPoints:
for secondPoint in listOfPoints:
if secondPoint != point:
if canLink(secondPoint,point):
if secondPoint in linkedPoints:
alternative = secondPoint
foundEdge = true
else:
best = secondPoint
foundEdge = true
break
if foundEdge:
linkedPoints.push(point)
edgeCount++
if best != None:
linkedPoints.push(best)
else:
linkedPoints.push(alternative)
return edgeCount
Но этот код, кажется, не всегда дают правильный ответ, то есть он рассчитывает на многое края, поэтому я прошу вас, что неправильно в этом коде ?
я, возможно, неправильно интерпретировали эту проблему, вот как он стоит: У вас есть набор n
точек, и вы предоставили все две точки пары, которые не могут быть связаны друг с другом, вы должны получить минимальные ребра, так что любая данная точка связана, по крайней мере, с другой.
Я думаю, что что-то не так с вашим упражнением. 1.) Лучше спросите такие теоретические вещи в сообществе «Компьютерные науки». 2.) Упражнение, как описано, тривиально.Возьмите список всех одиночных вершин и соедините их попарно. Вам понадобится половина краев, так как вы найдете одинокие вершины. 3.) Я предполагаю, что ваше упражнение отличается от другого, например «связать дерево». – Kellerspeicher
Я отредактировал сообщение, чтобы показать реальную проблему, действительно ли это путь? – Traxys
Я ограничил «вы предоставили все две пары точек, которые не могут быть связаны друг с другом» - это точка материи. Это предотвратит, чтобы глупо попарно соединить последовательные точки списка одиноких точек. Теперь упражнение уже не тривиально. – Kellerspeicher