ПредишенСледващото

алгоритъм Run Дейкстра, започваща от върха. Възможно е О (N2). възможно О (Mlog (п)). За да се провери наличието на първоначално запълване масив от разстояния някои по-големи постоянни = INF.

Разстоянието между върховете

Тук е необходимо да се напише честно Дейкстра с купчина или комплект. Също zavedom масив от предшественици за възстановяване път майка [V]. в която предшественик връх се съхранява V, от която ние сме дошли на този връх. Актуализиране на родителя [V] в двата случая, за първи път дойде в обем или получаване на разстояние по-малко от разстоянието [V]. Ако не съществува пътя, начина, по който времето се възстанови с помощта на набор от предци, като се започне от най-горния край, до предците, докато стигнем до дома. Също така да се отбележи, е, че има задължително трябва да напишете Алгоритъм на Дейкстра в списъците на съседство.

Стартирайте алгоритъм на Белман-Форд. Проверка за наличие на пътя не е стандартна - ако след N повторения дистрибуция [ф] = INF (който сте задали първоначално), а след това по пътя от и до ф не съществува. Имайте предвид, че безкрайно кратък път може да бъде само в случай на негативен цикъл тегло на съществуване, но това не е всичко. Освен факта, че такъв цикъл трябва да съществува, тя все още трябва да бъде достъпна от началната връх, и трябва да бъдат постижими крайния връх на този цикъл. Използване на Белман-Форд намери един връх на всеки цикъл. Zavedom например две булеви път масив [] и pathrev []. където пътя [V] = вярно. ако можем да получим от началната връх до с. pathrev [V] = вярно. ако можем да получим от връх V до Vertex ф. Първият масив е изпълнен използване обхождане в дълбочина на първоначалната графиката, като pathrev [] на транспонираното. Сега, ако има връх с. който принадлежи към отрицателен цикъл, както и правото за това, този път [V] · pathrev [V] = вярно. тогава отговорът е '-', в противен случай разстоянието, намери алгоритъм на Белман-Форд.

Standard алгоритъм Floyd разглоби вчерашната лекция.

Подобен проблем е проблемът с "най-краткия път", но тук трябва да се свърши работа, защото ние трябва да намерим не е най-краткия и най-дългия път, вие трябва да промените теглата на ръбове на обратната - се умножава с -1.

Стандартни BFS в една кутия, нищо особено, избухнали при вчерашната лекция.

Най-краткият път шах коня си представим клетката като връх. Две върховете А. В са свързани, ако кон може да се движи от А до В. Всеки такъв ребро ще има тегло единица. Остава да започнете търсенето на ширина, а след това се възстанови пътя.

В най-краткия път на два коня

Count е същата, както в предишния проблем. Сега в редица (вектор) ще се съхранява не само координатите на един кон, и след като координатите на два коня, както и всичко, което трябва да се помни кой от конете в момента прави следващия ход. Първоначално настроен на опашка стартиращи координати на два коня, както и някои флаг, съответстваща на тази първа кон ходи (при условие). Zavedom масив използва [], където се използва [x1] [y1] [x2] [y2] = вярно. ако предварително съществува положение два коня в който първият кон се поставя (х1, у1). и втори (х2; y2). Следващата стъпка на търсене в ширина ще бъде следното: ние сме в опашката (вектор) Стигаме до следващата двойка координати, ако се използва в даден условие е вярно, случаите продължават, в противен случай погледнете какво някои от конете сега се разхожда и се опитва да отидете на съответния щат, т.е. приемем, че конете се редуват - имам един чифт координати, погледна към него, и чийто ред е да се промени координатите на коня, ако се използва от новото състояние на фалшиви, след това въведе). Ако в даден момент ние открихме, че координатите на двата коня, същите като крайната им дестинация, то сключва BFS и възстановяване предци.

Забележка: в тази задача е по-добре да се съхранява на държавата не е в опашката, и вектора, и вместо докато правиш по този вектор прост за, тъй като векторът е по-удобно да се възстанови на предците, всички, които ще бъдат необходими за възстановяване на предците в случай на вектора е във всяка държава да съхранява и индекс вектора на състоянието родител.

Налице е просто пуснете BFS не работи, тъй като ние представяме по краищата, които имат тегло от 0, 1, 2. Как се търси най-краткия път в случай на графика 0-1, ние обсъжда на лекцията, но какво да правя с теглото на перките 2. отговорът е прост - да се прекъсне най-добре двете. Например, ние имаме два върха а и б. muzhdu тегло ребро, което е две. Ние zavedom фиктивен връх в. и замени ръб (а. б) тегло два от две ребра (а. в) и (С. б) тегло един, тъй като теглото на ребро за kadogo 2. Като резултат, ние получаваме графиката, всички от чиито краища имат тегло на 0 или 1 и най-краткия начин да направите това ние ще бъдем в състояние да намери чрез BFS. Тя не трябва да забравяме, когато се възстанови Между другото, за наш заместник, и да не се показва фиктивни върхове.

Разстоянието от корена

Тази задача е последният в ред, но очевидно не е най-сложна, добре направено от тези, които имат силата да прочетете условията на всички задачи, за да приключите. Решението е просто - можете да стартирате BFS, Белман Форд, Дейкстра, Флойд, или дори един обикновен DFS, тъй като задачата дава на дървото. След това намерете разстоянието до всички върхове от самото начало, за DFS дистанцират същите като височината на пиковете в дървото.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!