mirror of
https://github.com/data61/MP-SPDZ.git
synced 2026-04-20 03:01:31 -04:00
51 lines
1.3 KiB
Plaintext
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())
|