Gå til innhold

Regne ut lengste rute mellom 5-10punkt(gps kordinater)


Anbefalte innlegg

Videoannonse
Annonse

hehe, det er en måte å gjøre det på... jeg så for meg å bruke svaret fra google maps(kjørelengden) mellom 2 punkt, og så finne den kombinasjonen av punkt som er lengst... men avlikevel ha en så rett sum mulig linje mellom punktene...

Lenke til kommentar

regner med du kun kan gå innom et punk en gang? Dette høres ut som enkel graf-teori. Sett opp en vektet graf som beskriver problemet; og siden det er så få punkter kan man da gjøre et enkelt breddeførst eller dybdeførst søk gjennom grafen og ta den veien som var lengst. Vil selv anbefale dybde-først-søk her.

 

http://en.wikipedia.org/wiki/Depth-first_search

http://www.algolist.net/Algorithms/Graph/Undirected/Depth-first_search

 

Om det hadde vært flere punkter ville andre graf-algoritmer vært bedre.

 

Jeg ser du la dette i .NET delen, men du får gjøre den delen selv. Kan gi deg et eksempel skrevet i python.

La oss forutsette at du har følgende punkter hvor tallet i mellom dem er avstanden mellom punktene. Dette kan beskrive f.eks. mulige kjøreruter mellom forskjellige byer.

200px-Prim_Algorithm_0.svg.png

 

Setter opp en nabo-matrise som beskriver denne grafen:

889995.jpeg

 

# -*- coding: cp1252 -*-
matrix = [
[0,7,0,5,0,0,0],
[7,0,8,9,7,0,0],
[0,8,0,0,5,0,0],
[5,9,0,0,15,6,0],
[0,7,5,15,0,8,9],
[0,0,0,6,8,0,11],
[0,0,0,0,9,11,0]]

# Finner den lengste stien fra et gitt startpunkt
def dfs(start):
   fringe = [(start,0,[])]
   longest = ([], -1)
   while len(fringe) > 0:
       node, length, path = fringe.pop()
       if length > longest[1]:
           longest = (path+[node], length)

       neighbours = get_neighbours(node)
       for vertex,distance in neighbours:
           if vertex not in path:
               fringe.append( (vertex, length+distance, path+[node]) )
   return longest

# Gir alle naboene til en gitt node, og avstanden
def get_neighbours(vertex):
   neighbours = list()
   for x in xrange(len(matrix)):
       if x == vertex:
           continue
       if matrix[vertex][x] != 0:
           neighbours.append((x, matrix[vertex][x]))
   return neighbours

def print_path(path):
   for x in xrange(len(path[0])):
       print chr(path[0][x]+65),
       if x < len(path[0])-1:
           print " -> ",
   print
   print "Total length:",path[1]

if __name__ == '__main__':
   longest_path = ([], 0) # ([path], length)

   # Vi prøver alle mulige veier fra alle mulige startpunkter
   for x in xrange(len(matrix)):
       path = dfs(x)
       if path[1] > longest_path[1]:
           longest_path = path
   print_path(longest_path)

 

Output:

C -> B -> A -> D -> E -> G -> F

Total length: 55

Endret av etse
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...