Initial data commit

This commit is contained in:
Ingy döt Net 2023-07-01 11:58:00 -04:00
parent 72d218235f
commit f23f22d71c
199087 changed files with 3378941 additions and 0 deletions

View file

@ -0,0 +1,22 @@
const INF=(0).MAX;
fcn dijkstra(graph,start,dst){
Q :=graph.copy();
prev:=graph.keys.pump(Dictionary().add.fp1(Void));
dist:=graph.keys.pump(Dictionary().add.fp1(INF));
dist[start]=0;
while(Q){
Q.reduce('wrap(min,[(v,_)],ru){
if((d:=dist[v])<min){ ru.set(v); d } else min },
INF,ru:=Ref(Void));
if(not u:=ru.value) return("Can't get there");
if(u==dst){
S:=List(); do{ S.append(u); u=prev[u]; }while(u);
return(S.reverse());
}
Q.del(u);
foreach v,len in (graph[u]){ // (neighborVertex,len to neighbor)...
alt:=dist[u] + len;
if(alt<dist[v]){ dist[v]=alt; prev[v]=u; }
}
}
}

View file

@ -0,0 +1,10 @@
graph:=Dictionary( // directed graph
"a", T(T("b", 7.0), T("c", 9.0), T("f",14.0)),
"b", T(T("c",10.0), T("d",15.0)),
"c", T(T("d",11.0), T("f", 2.0)),
"d", T(T("e", 6.0)),
"e", T(T("f", 9.0)),
"f", T,
);
dijkstra(graph,"a","e").println();
dijkstra(graph,"e","a").println();