Paano mo mahahanap ang pinakamaikling landas sa isang nakadirekta na graph?
Paano mo mahahanap ang pinakamaikling landas sa isang nakadirekta na graph?

Video: Paano mo mahahanap ang pinakamaikling landas sa isang nakadirekta na graph?

Video: Paano mo mahahanap ang pinakamaikling landas sa isang nakadirekta na graph?
Video: Pagganyak na Gawain para sa Demo Teaching 2024, Mayo
Anonim

Nabigyan ng Weighted Nakadirekta Acyclic Graph at isang source vertex sa graph , Hanapin ang pinakamaikling landas mula sa ibinigay na pinagmulan hanggang sa lahat ng iba pang mga vertex.

Pinakamaikling Landas sa Directed Acyclic Graph

  1. Simulan ang dist = {INF, INF, ….}
  2. Gumawa ng toplogical order ng lahat ng vertices.
  3. Gawin ang pagsunod para sa bawat vertex u sa topological order.

Sa ganitong paraan, paano mo mahahanap ang pinakamaikling landas sa isang graph?

Ang Mga Hakbang sa Algorithm: Para sa a graph na may mga vertex: Simulan ang pinakamaikling landas sa pagitan ng anumang vertex na may Infinity. Hanapin pares lahat pinakamaikling landas na gumagamit ng mga intermediate vertex, kung gayon hanapin ang pinakamaikling landas na gumagamit ng intermediate vertex at iba pa.. hanggang sa gamitin ang lahat ng vertex bilang intermediate node.

Sa tabi sa itaas, paano mo mahahanap ang pinakamaikling landas sa DFS? Hindi, hindi mo magagamit DFS sa hanapin ang pinakamaikling landas sa isang walang timbang na graph. Hindi ito ang kaso na, paghahanap ang pinakamaikling landas sa pagitan ng dalawang node ay eksklusibong nalutas ng BFS.

Katulad nito, paano mo mahahanap ang pinakamaikling landas sa isang puno?

  1. Traverse tree (depth-first)
  2. Panatilihin ang mga index (node)
  3. idagdag ang mga halaga.
  4. gawin (1) hanggang sa dulo ng puno.
  5. ihambing ang kabuuan at i-print ang landas at kabuuan.

Aling algorithm ang ginagamit upang mahanap ang pinakamaikling landas?

Algorithm ng Pinakamaikling Daan ng Dijkstra

Inirerekumendang: