iki grafik düğümleri arasında bir yol arama xQuery bir grafikte iki düğüm arasında bir yol arar ve bir yol döndüren bir algoritma yapmaya çalışıyorum, bir düğüm döndürdüğü kadarıyla hiç şansım olmadı ve adyanth düğümleri. İlk i grafiği yönlendirilmiş grafiktir ve kökeni ama değil takip ediyor düğümler
XQuery
için her düğüm bir düğüm sadece bağlantı vardır XML, sıfır, bir veya birden fazla kaynağı olabilir açıkça yapmalıdır İşte bir bazı düğümlerin bir örnek ve bu XML itibaren kendi XML
<node>
<id> 123-456-789</id>
<name> something </name>
<Links>
<Link>
<origin></origin>
</Link>
<Links>
<node>
<id> 245-678-901</id>
<name> node 2</name>
<Links>
<Link>
<origin> 123-456-789 </origin>
</Link>
<Links>
<node>
<id> xxx-xxx-xxx</id>
<name> node 3</name>
<Links>
<Link>
<origin> 123-456-789 </origin>
</Link>
<Links>
<node>
<id> 234-546-768</id>
<name> node 4</name>
<Links>
<Link>
<origin> 245-678-901</origin>
</Link>
<Links>
i düğüm 4'e düğüm 1'den yolunu almak istiyorum var (node1-> node2 -> düğüm4) ama olur sadece yapmaya çalışacağım ne olursa olsun node1-node2 ve node3 ver ama node4 'u başka bir şey vermek istemiyorum, başka bir şey olmayan bir yol seçmek istiyorum Ben
def BFS(graph,start,end,q):
temp_path = [start]
q.enqueue(temp_path)
while q.IsEmpty() == False:
tmp_path = q.dequeue()
last_node = tmp_path[len(tmp_path)-1]
print tmp_path
if last_node == end:
print "VALID_PATH : ",tmp_path
for link_node in graph[last_node]:
if link_node not in tmp_path:
new_path = []
new_path = tmp_path + [link_node]
q.enqueue(new_path)
(kod xquery için bu piton kodunu adapte denedim
ct, ben Düğüm6 yöneliktir Düğüm5 ve node7 ama hem Düğüm5 ve node7 arasındaki yolu istiyorsanız, demek benim değil, bu o this activestate page de haklı kodlayıcı) var aittir
buradai yapmaya çalıştığım budur:
declare function local:BFS($graph as element()* , $ini_node as element(Node)*, $end_node as element(Node)*) as element()*
{
let $seq := $ini_node
let $queue := ($seq)
for $item in $queue
return
if (count($queue) > 0) then
let $seq := remove($queue, count($queue))
let $last := $seq[last()] return if (deep-equal($last, $end_node)) then $seq
else
for $node in $graph[contains(.,$graph/id[contains(.,$last/Links/Link/origin/text())])] (: what i've tried was to get the graph nodes which id is equal to the origins of the last node :)
return if(not(functx:is-node-in-sequence-deep-equal($node,$seq))) then
let $new_path:=()
let $new_path:= insert-before($seq, count($seq)+1, $node)
let $queue := insert-before($queue,1, $new_path) return $queue
else()
else
()
};
"Düğüm5 ve node7 arasındaki yolu istiyordum ancak node5 ve node7 düğümü her node6'ya yönlendiriliyorsa," Kenarları her iki yönde de taşımak istediğiniz anlamına mı geliyor? –
Evet, bu demek istediğim, iki düğüm arasındaki yolun, node5 -> node6 <- node7 – HardCodeStuds