Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
|
|
@ -0,0 +1,22 @@
|
|||
fcn FloydWarshallWithPathReconstruction(dist){ // dist is munged
|
||||
V:=dist[0].len();
|
||||
next:=V.pump(List,V.pump(List,Void.copy).copy); // VxV matrix of Void
|
||||
foreach u,v in (V,V){ if(dist[u][v]!=Void and u!=v) next[u][v] = v }
|
||||
foreach k,i,j in (V,V,V){
|
||||
a,b,c:=dist[i][j],dist[i][k],dist[k][j];
|
||||
if( (a!=Void and b!=Void and c!=Void and a>b+c) or // Inf math
|
||||
(a==Void and b!=Void and c!=Void) ){
|
||||
dist[i][j] = b+c;
|
||||
next[i][j] = next[i][k];
|
||||
}
|
||||
}
|
||||
return(dist,next)
|
||||
}
|
||||
fcn path(next,u,v){
|
||||
if(Void==next[u][v]) return(T);
|
||||
path:=List(u);
|
||||
while(u!=v){ path.append(u = next[u][v]) }
|
||||
path
|
||||
}
|
||||
fcn printM(m){ m.pump(Console.println,rowFmt) }
|
||||
fcn rowFmt(row){ ("%5s "*row.len()).fmt(row.xplode()) }
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
const V=4;
|
||||
dist:=V.pump(List,V.pump(List,Void.copy).copy); // VxV matrix of Void
|
||||
foreach i in (V){ dist[i][i] = 0 } // zero vertexes
|
||||
|
||||
/* Graph from the Wikipedia:
|
||||
1 2 3 4
|
||||
d ----------
|
||||
1| 0 X -2 X
|
||||
2| 4 0 3 X
|
||||
3| X X 0 2
|
||||
4| X -1 X 0
|
||||
*/
|
||||
dist[0][2]=-2; dist[1][0]=4; dist[1][2]=3; dist[2][3]=2; dist[3][1]=-1;
|
||||
|
||||
dist,next:=FloydWarshallWithPathReconstruction(dist);
|
||||
println("Shortest distance array:"); printM(dist);
|
||||
println("\nPath array:"); printM(next);
|
||||
println("\nAll paths:");
|
||||
foreach u,v in (V,V){
|
||||
if(p:=path(next,u,v)) p.println();
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue