2012-07-12, 18:08
  #1
Medlem
Hej!

Märkte nyligen att jag hade missat att lämna in en uppgift i min programmeringskurs. Har minne av att jag gjort den (och förmodligen lyckats glömma lämna in den) men det var över ett halvår sedan och jag kan inte hitta den på datorn nu, och jag har helt glömt bort hur man gör.

http://i.imgur.com/0w7fZ.jpg

Så om någon kan hjälpa mig igång så vore det väldigt uppskattat!
Citera
2012-07-12, 18:32
  #2
Medlem
kqrs avatar
Vilken del av Dijkstra's algoritm är det du har svårt för?
Citera
2012-07-12, 19:33
  #3
Medlem
Helt enkelt hur man använder den.

Jag testade lite för hand med papper och penna och började på en lösning som liknar:

start dest dist
a b 6
a c 8
a g 2
g c 1

a->g->c = 3 som i sin tur < 8

alltså ändrar man andra raden till:

a c 83

Är jag på rätt spår? Känns som en väldigt långdragen och osmidig lösning.
Citera
2012-07-13, 10:04
  #4
Medlem
kqrs avatar
Citat:
Ursprungligen postat av mp-jby
Är jag på rätt spår? Känns som en väldigt långdragen och osmidig lösning.
Om du får rätt resultat så är du på rätt spår. Att hitta kortaste avståndet i grafer är långdraget och osmidigt, eftersom man i princip måste köra på brute force för att vara säker.

Just i ditt fall, följandes algoritmen som den står på Wikipedia:

Citat:
1. Assign to every node a tentative distance value: set it to zero for our initial node and to infinity for all other nodes.

Kod:
Tentative distances:
A 0
B ∞
C ∞
G ∞

Citat:
2. Mark all nodes unvisited. Set the initial node as current. Create a set of the unvisited nodes called the unvisited set consisting of all the nodes except the initial node.

Kod:
Current node:
A

Kod:
Unvisited set:
B C G

Citat:
3. For the current node, consider all of its unvisited neighbors and calculate their tentative distances. For example, if the current node A is marked with a tentative distance of 6, and the edge connecting it with a neighbor B has length 2, then the distance to B (through A) will be 6+2=8. If this distance is less than the previously recorded tentative distance of B, then overwrite that distance. Even though a neighbor has been examined, it is not marked as visited at this time, and it remains in the unvisited set.

Kod:
Tentative distances:
A 0
B 6
C 8
G 2

Citat:
4. When we are done considering all of the neighbors of the current node, mark the current node as visited and remove it from the unvisited set. A visited node will never be checked again; its distance recorded now is final and minimal.

Kod:
Unvisited set:
B C G

Citat:
5. If the destination node has been marked visited (when planning a route between two specific nodes) or if the smallest tentative distance among the nodes in the unvisited set is infinity (when planning a complete traversal), then stop. The algorithm has finished.

Nope.

Citat:
6. Set the unvisited node marked with the smallest tentative distance as the next "current node" and go back to step 3.

Kod:
Tentative distances:
A 0
B 6
C 8
G 2

Kod:
Current node:
G

Kod:
Unvisited set:
B C G

Citat:
3. For the current node, consider all of its unvisited neighbors and calculate their tentative distances. For example, if the current node A is marked with a tentative distance of 6, and the edge connecting it with a neighbor B has length 2, then the distance to B (through A) will be 6+2=8. If this distance is less than the previously recorded tentative distance of B, then overwrite that distance. Even though a neighbor has been examined, it is not marked as visited at this time, and it remains in the unvisited set.

Kod:
Tentative distances:
A 0
B 6
C 3
G 2

Citat:
4. When we are done considering all of the neighbors of the current node, mark the current node as visited and remove it from the unvisited set. A visited node will never be checked again; its distance recorded now is final and minimal.

Kod:
Unvisited set:
B C

Citat:
5. If the destination node has been marked visited (when planning a route between two specific nodes) or if the smallest tentative distance among the nodes in the unvisited set is infinity (when planning a complete traversal), then stop. The algorithm has finished.

Nope.

Citat:
6. Set the unvisited node marked with the smallest tentative distance as the next "current node" and go back to step 3.

Kod:
Tentative distances:
A 0
B 6
C 3
G 2

Kod:
Current node:
C

Kod:
Unvisited set:
B C

Citat:
3. For the current node, consider all of its unvisited neighbors and calculate their tentative distances. For example, if the current node A is marked with a tentative distance of 6, and the edge connecting it with a neighbor B has length 2, then the distance to B (through A) will be 6+2=8. If this distance is less than the previously recorded tentative distance of B, then overwrite that distance. Even though a neighbor has been examined, it is not marked as visited at this time, and it remains in the unvisited set.

Kod:
Tentative distances:
A 0
B 6
C 3
G 2

Citat:
4. When we are done considering all of the neighbors of the current node, mark the current node as visited and remove it from the unvisited set. A visited node will never be checked again; its distance recorded now is final and minimal.

Kod:
Unvisited set:
B

Citat:
5. If the destination node has been marked visited (when planning a route between two specific nodes) or if the smallest tentative distance among the nodes in the unvisited set is infinity (when planning a complete traversal), then stop. The algorithm has finished.

Yes! För att ta reda på kortaste vägen behöver man nu bara följa de kortaste siffrorna baklänges från C. I det här fallet blir det C -> G -> A. Vänd på det och du har vägen A -> G -> C!
__________________
Senast redigerad av kqr 2012-07-13 kl. 10:21.
Citera
2012-07-23, 17:22
  #5
Medlem
Ursäkta för sent svar men tusen tack för hjälpen!
Citera
2012-08-13, 17:58
  #6
Medlem
b) Gör en bredden först traversering och en djupet först traversering som
utgår från noden H.
Redogör för stegen i Din lösning.


Förstår inte hur de menar här. H finns inte ens med i grafen, eller missar jag något?
__________________
Senast redigerad av mp-jby 2012-08-13 kl. 18:33.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in