Files
MP-SPDZ/Programs/Source/dijkstra_example.mpc
2022-05-27 14:20:31 +02:00

51 lines
1.3 KiB
Plaintext

# example code for graph with vertices 0,1,2 and with following weights
# 0 -> 1: 5
# 0 -> 2: 20
# 1 -> 2: 10
# output should be the following
# from 0 to 0 at cost 0 via vertex 0
# from 0 to 1 at cost 5 via vertex 0
# from 0 to 2 at cost 15 via vertex 1
from oram import OptimalORAM
from dijkstra import dijkstra
# structure for edges
# contains tuples of form (neighbor, cost, last neighbor bit)
edges = OptimalORAM(4, # number of edges
entry_size=(2, # enough bits for vertices
5, # enough bits for costs
1) # always one
)
# first edge from vertex 0
edges[0] = (1, 5, 0)
# second and last edge from vertex 0
edges[1] = (2, 20, 1)
# edge from vertex 1
edges[2] = (2, 10, 1)
# dummy edge from vertex 2 to itself
edges[3] = (2, 0, 1)
# structure assigning edge list indices to vertices
e_index = OptimalORAM(3, # number vertices
entry_size=2) # enough bits for edge indices
# edges from 0 start at 0
e_index[0] = 0
# edges from 1 start at 2
e_index[1] = 2
# edges from 2 start at 3
e_index[2] = 3
source = sint(0)
res = dijkstra(source, edges, e_index, OptimalORAM)
@for_range(res.size)
def _(i):
import util
print_ln('from %s to %s at cost %s via vertex %s', source.reveal(), i,
res[i][0].reveal(), res[i][1].reveal())