User interface + adjustments to display locations
This commit is contained in:
parent
35e9885ccb
commit
e0e60c8f3e
BIN
graphs.cmi
BIN
graphs.cmi
Binary file not shown.
BIN
graphs.cmo
BIN
graphs.cmo
Binary file not shown.
338
graphs.ml
338
graphs.ml
|
@ -152,7 +152,7 @@ let generate_type2_graph w h freq inf sup =
|
|||
|
||||
gr ;;
|
||||
|
||||
let another_type_of_graph_printing (gr : type2graph) r d is_weighted =
|
||||
let another_type_of_graph_printing (gr : type2graph) r dx dy is_weighted =
|
||||
let colors = Array.make_matrix gr.width gr.height (rgb 0 0 0) in
|
||||
for i = 0 to gr.width -1 do
|
||||
for j = 0 to gr.height -1 do
|
||||
|
@ -183,37 +183,37 @@ let another_type_of_graph_printing (gr : type2graph) r d is_weighted =
|
|||
set_color black ;
|
||||
for i = 0 to gr.width -1 do
|
||||
for j = 0 to gr.height -1 do
|
||||
let node_xy = ((r + (2*r + d)*i), (r + (2*r + d)*j)) in
|
||||
let node_xy = ((r + (2*r + dx)*i), (r + (2*r + dy)*j)) in
|
||||
if (i > 0 && j > 0) && gr.g.(i).(j).edges.(0) <> (-1) then begin (* SO *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*(j-1))|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*(j-1))|] ;
|
||||
end;
|
||||
|
||||
if (i > 0) && gr.g.(i).(j).edges.(1) <> (-1) then begin (* O *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*j)|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*j)|] ;
|
||||
end;
|
||||
|
||||
if (i > 0 && j < gr.height -1) && gr.g.(i).(j).edges.(2) <> (-1) then begin (* NO *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*(j+1))|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*(j+1))|] ;
|
||||
end;
|
||||
|
||||
if (j < gr.height -1) && gr.g.(i).(j).edges.(3) <> (-1) then begin (* N *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*i), (r + (2*r + d)*(j+1))|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*i), (r + (2*r + dy)*(j+1))|] ;
|
||||
end;
|
||||
|
||||
if (i < gr.width-1 && j < gr.height -1) && gr.g.(i).(j).edges.(4) <> (-1) then begin (* NE *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(j+1))|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*(j+1))|] ;
|
||||
end;
|
||||
|
||||
if (i < gr.width-1) && gr.g.(i).(j).edges.(5) <> (-1) then begin (* E *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*j)|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*j)|] ;
|
||||
end;
|
||||
|
||||
if (i < gr.width-1 && j > 0) && gr.g.(i).(j).edges.(6) <> (-1) then begin (* SE *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(j-1))|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*(j-1))|] ;
|
||||
end;
|
||||
|
||||
if (j > 0) && gr.g.(i).(j).edges.(7) <> (-1) then begin (* S *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*i), (r + (2*r + d)*(j-1))|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*i), (r + (2*r + dy)*(j-1))|] ;
|
||||
end;
|
||||
|
||||
done
|
||||
|
@ -228,7 +228,7 @@ let another_type_of_graph_printing (gr : type2graph) r d is_weighted =
|
|||
set_line_width 8;
|
||||
for i = 0 to gr.width -1 do
|
||||
for j = 0 to gr.height -1 do
|
||||
let node_xy = ((r + (2*r + d)*i), (r + (2*r + d)*j)) in
|
||||
let node_xy = ((r + (2*r + dx)*i), (r + (2*r + dy)*j)) in
|
||||
if (i > 0 && j > 0) && gr.g.(i).(j).edges.(0) <> (-1) then begin (* SO *)
|
||||
if is_weighted then begin
|
||||
set_color bcolor;
|
||||
|
@ -240,7 +240,7 @@ let another_type_of_graph_printing (gr : type2graph) r d is_weighted =
|
|||
else begin
|
||||
set_line_width 8;
|
||||
set_color colors.(i).(j) ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j-1))/3|] ;
|
||||
end
|
||||
end;
|
||||
|
||||
|
@ -255,7 +255,7 @@ let another_type_of_graph_printing (gr : type2graph) r d is_weighted =
|
|||
else begin
|
||||
set_line_width 8;
|
||||
set_color colors.(i).(j) ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*j)/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dy)*j)/3|] ;
|
||||
end
|
||||
end;
|
||||
|
||||
|
@ -270,7 +270,7 @@ let another_type_of_graph_printing (gr : type2graph) r d is_weighted =
|
|||
else begin
|
||||
set_line_width 8;
|
||||
set_color colors.(i).(j) ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j+1))/3|] ;
|
||||
end
|
||||
end;
|
||||
|
||||
|
@ -285,7 +285,7 @@ let another_type_of_graph_printing (gr : type2graph) r d is_weighted =
|
|||
else begin
|
||||
set_line_width 8;
|
||||
set_color colors.(i).(j) ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*i)/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*i)/3, (2 * (snd node_xy) + r + (2*r + dy)*(j+1))/3|] ;
|
||||
end
|
||||
end;
|
||||
|
||||
|
@ -300,7 +300,7 @@ let another_type_of_graph_printing (gr : type2graph) r d is_weighted =
|
|||
else begin
|
||||
set_line_width 8;
|
||||
set_color colors.(i).(j) ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j+1))/3|] ;
|
||||
end
|
||||
end;
|
||||
|
||||
|
@ -315,7 +315,7 @@ let another_type_of_graph_printing (gr : type2graph) r d is_weighted =
|
|||
else begin
|
||||
set_line_width 8;
|
||||
set_color colors.(i).(j) ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*j)/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dy)*j)/3|] ;
|
||||
end
|
||||
end;
|
||||
|
||||
|
@ -330,7 +330,7 @@ let another_type_of_graph_printing (gr : type2graph) r d is_weighted =
|
|||
else begin
|
||||
set_line_width 8;
|
||||
set_color colors.(i).(j) ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j-1))/3|] ;
|
||||
end
|
||||
end;
|
||||
|
||||
|
@ -345,7 +345,7 @@ let another_type_of_graph_printing (gr : type2graph) r d is_weighted =
|
|||
else begin
|
||||
set_line_width 8;
|
||||
set_color colors.(i).(j) ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*i)/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*i)/3, (2 * (snd node_xy) + r + (2*r + dy)*(j-1))/3|] ;
|
||||
end
|
||||
end;
|
||||
|
||||
|
@ -356,11 +356,11 @@ let another_type_of_graph_printing (gr : type2graph) r d is_weighted =
|
|||
for i = 0 to gr.width -1 do
|
||||
for j = 0 to gr.height -1 do
|
||||
set_color (rgb 48 48 48) ;
|
||||
fill_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ;
|
||||
fill_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ;
|
||||
set_color black ;
|
||||
draw_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ;
|
||||
draw_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ;
|
||||
set_color colors.(i).(j) ;
|
||||
draw_integer (r + (2*r + d)*i) (r + (2*r + d)*j) gr.g.(i).(j).tag r
|
||||
draw_integer (r + (2*r + dx)*i) (r + (2*r + dy)*j) gr.g.(i).(j).tag r
|
||||
done
|
||||
done ;
|
||||
|
||||
|
@ -370,7 +370,7 @@ let another_type_of_graph_printing (gr : type2graph) r d is_weighted =
|
|||
(* ------------------------------------------------------------*)
|
||||
(* ------------------------------------------------------------*)
|
||||
|
||||
let another_type_of_dfs (gr : type2graph) r d =
|
||||
let another_type_of_dfs (gr : type2graph) r dx dy dt =
|
||||
let colors = Array.make_matrix gr.width gr.height (rgb 0 0 0) in
|
||||
for i = 0 to gr.width -1 do
|
||||
for j = 0 to gr.height -1 do
|
||||
|
@ -398,37 +398,37 @@ let another_type_of_dfs (gr : type2graph) r d =
|
|||
set_color (rgb 192 192 192) ;
|
||||
for i = 0 to gr.width -1 do
|
||||
for j = 0 to gr.height -1 do
|
||||
let node_xy = ((r + (2*r + d)*i), (r + (2*r + d)*j)) in
|
||||
let node_xy = ((r + (2*r + dx)*i), (r + (2*r + dy)*j)) in
|
||||
if (i > 0 && j > 0) && gr.g.(i).(j).edges.(0) <> (-1) then begin (* SO *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*(j-1))|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*(j-1))|] ;
|
||||
end;
|
||||
|
||||
if (i > 0) && gr.g.(i).(j).edges.(1) <> (-1) then begin (* O *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*j)|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*j)|] ;
|
||||
end;
|
||||
|
||||
if (i > 0 && j < gr.height -1) && gr.g.(i).(j).edges.(2) <> (-1) then begin (* NO *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*(j+1))|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*(j+1))|] ;
|
||||
end;
|
||||
|
||||
if (j < gr.height -1) && gr.g.(i).(j).edges.(3) <> (-1) then begin (* N *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*i), (r + (2*r + d)*(j+1))|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*i), (r + (2*r + dy)*(j+1))|] ;
|
||||
end;
|
||||
|
||||
if (i < gr.width-1 && j < gr.height -1) && gr.g.(i).(j).edges.(4) <> (-1) then begin (* NE *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(j+1))|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*(j+1))|] ;
|
||||
end;
|
||||
|
||||
if (i < gr.width-1) && gr.g.(i).(j).edges.(5) <> (-1) then begin (* E *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*j)|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*j)|] ;
|
||||
end;
|
||||
|
||||
if (i < gr.width-1 && j > 0) && gr.g.(i).(j).edges.(6) <> (-1) then begin (* SE *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(j-1))|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*(j-1))|] ;
|
||||
end;
|
||||
|
||||
if (j > 0) && gr.g.(i).(j).edges.(7) <> (-1) then begin (* S *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*i), (r + (2*r + d)*(j-1))|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*i), (r + (2*r + dy)*(j-1))|] ;
|
||||
end;
|
||||
|
||||
done
|
||||
|
@ -437,37 +437,37 @@ let another_type_of_dfs (gr : type2graph) r d =
|
|||
set_line_width 8;
|
||||
for i = 0 to gr.width -1 do
|
||||
for j = 0 to gr.height -1 do
|
||||
let node_xy = ((r + (2*r + d)*i), (r + (2*r + d)*j)) in
|
||||
let node_xy = ((r + (2*r + dx)*i), (r + (2*r + dy)*j)) in
|
||||
if (i > 0 && j > 0) && gr.g.(i).(j).edges.(0) <> (-1) then begin (* SO *)
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j-1))/3|] ;
|
||||
end;
|
||||
|
||||
if (i > 0) && gr.g.(i).(j).edges.(1) <> (-1) then begin (* O *)
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*j)/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dy)*j)/3|] ;
|
||||
end;
|
||||
|
||||
if (i > 0 && j < gr.height -1) && gr.g.(i).(j).edges.(2) <> (-1) then begin (* NO *)
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j+1))/3|] ;
|
||||
end;
|
||||
|
||||
if (j < gr.height -1) && gr.g.(i).(j).edges.(3) <> (-1) then begin (* N *)
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*i)/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*i)/3, (2 * (snd node_xy) + r + (2*r + dy)*(j+1))/3|] ;
|
||||
end;
|
||||
|
||||
if (i < gr.width-1 && j < gr.height -1) && gr.g.(i).(j).edges.(4) <> (-1) then begin (* NE *)
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j+1))/3|] ;
|
||||
end;
|
||||
|
||||
if (i < gr.width-1) && gr.g.(i).(j).edges.(5) <> (-1) then begin (* E *)
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*j)/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dy)*j)/3|] ;
|
||||
end;
|
||||
|
||||
if (i < gr.width-1 && j > 0) && gr.g.(i).(j).edges.(6) <> (-1) then begin (* SE *)
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j-1))/3|] ;
|
||||
end;
|
||||
|
||||
if (j > 0) && gr.g.(i).(j).edges.(7) <> (-1) then begin (* S *)
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*i)/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*i)/3, (2 * (snd node_xy) + r + (2*r + dy)*(j-1))/3|] ;
|
||||
end;
|
||||
|
||||
done
|
||||
|
@ -477,21 +477,21 @@ let another_type_of_dfs (gr : type2graph) r d =
|
|||
for i = 0 to gr.width -1 do
|
||||
for j = 0 to gr.height -1 do
|
||||
set_color (rgb 192 192 192) ;
|
||||
fill_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ;
|
||||
fill_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ;
|
||||
set_color (rgb 100 100 100) ;
|
||||
draw_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ;
|
||||
draw_integer (r + (2*r + d)*i) (r + (2*r + d)*j) gr.g.(i).(j).tag r
|
||||
draw_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ;
|
||||
draw_integer (r + (2*r + dx)*i) (r + (2*r + dy)*j) gr.g.(i).(j).tag r
|
||||
done
|
||||
done ;
|
||||
|
||||
let draw_tile i j =
|
||||
set_line_width 5;
|
||||
set_color (rgb 48 48 48) ;
|
||||
fill_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ;
|
||||
fill_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ;
|
||||
set_color black;
|
||||
draw_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ;
|
||||
draw_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ;
|
||||
set_color colors.(i).(j);
|
||||
draw_integer (r + (2*r + d)*i) (r + (2*r + d)*j) gr.g.(i).(j).tag r ;
|
||||
draw_integer (r + (2*r + dx)*i) (r + (2*r + dy)*j) gr.g.(i).(j).tag r ;
|
||||
in
|
||||
|
||||
(* Now for the actual DFS *)
|
||||
|
@ -504,21 +504,21 @@ let another_type_of_dfs (gr : type2graph) r d =
|
|||
draw_tile i j;
|
||||
|
||||
set_color white;
|
||||
fill_circle (1200-r) (800-r) r;
|
||||
fill_circle (r + (2*r + dx)*(gr.width/2)) (r + (2*r + dy)*(gr.height/2)) r;
|
||||
set_color black;
|
||||
draw_integer (1200-r) (800-r) depth r;
|
||||
draw_integer (r + (2*r + dx)*(gr.width/2)) (r + (2*r + dy)*(gr.height/2)) depth r;
|
||||
|
||||
Unix.sleepf 0.8;
|
||||
Unix.sleepf dt;
|
||||
|
||||
let node_xy = ((r + (2*r + d)*i), (r + (2*r + d)*j)) in
|
||||
let node_xy = ((r + (2*r + dx)*i), (r + (2*r + dy)*j)) in
|
||||
|
||||
if (i > 0 && j > 0) && gr.g.(i).(j).edges.(0) <> (-1) && (visited.(i-1).(j-1) = false) then begin (* SO *)
|
||||
set_line_width 4;
|
||||
set_color black;
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*(j-1))|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*(j-1))|] ;
|
||||
set_color colors.(i).(j);
|
||||
set_line_width 8;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j-1))/3|] ;
|
||||
|
||||
draw_tile i j;
|
||||
|
||||
|
@ -528,10 +528,10 @@ let another_type_of_dfs (gr : type2graph) r d =
|
|||
if (i > 0) && gr.g.(i).(j).edges.(1) <> (-1) && (visited.(i-1).(j) = false) then begin (* O *)
|
||||
set_line_width 4;
|
||||
set_color black;
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*j)|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*j)|] ;
|
||||
set_color colors.(i).(j);
|
||||
set_line_width 8;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*j)/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dy)*j)/3|] ;
|
||||
|
||||
draw_tile i j;
|
||||
|
||||
|
@ -541,10 +541,10 @@ let another_type_of_dfs (gr : type2graph) r d =
|
|||
if (i > 0 && j < gr.height -1) && gr.g.(i).(j).edges.(2) <> (-1) && (visited.(i-1).(j+1) = false) then begin (* NO *)
|
||||
set_line_width 4;
|
||||
set_color black;
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*(j+1))|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*(j+1))|] ;
|
||||
set_color colors.(i).(j);
|
||||
set_line_width 8;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j+1))/3|] ;
|
||||
|
||||
draw_tile i j;
|
||||
|
||||
|
@ -554,10 +554,10 @@ let another_type_of_dfs (gr : type2graph) r d =
|
|||
if (j < gr.height -1) && gr.g.(i).(j).edges.(3) <> (-1) && (visited.(i).(j+1) = false) then begin (* N *)
|
||||
set_line_width 4;
|
||||
set_color black;
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*i), (r + (2*r + d)*(j+1))|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*i), (r + (2*r + dy)*(j+1))|] ;
|
||||
set_color colors.(i).(j);
|
||||
set_line_width 8;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*i)/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*i)/3, (2 * (snd node_xy) + r + (2*r + dy)*(j+1))/3|] ;
|
||||
|
||||
draw_tile i j;
|
||||
|
||||
|
@ -567,10 +567,10 @@ let another_type_of_dfs (gr : type2graph) r d =
|
|||
if (i < gr.width-1 && j < gr.height -1) && gr.g.(i).(j).edges.(4) <> (-1) && (visited.(i+1).(j+1) = false) then begin (* NE *)
|
||||
set_line_width 4;
|
||||
set_color black;
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(j+1))|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*(j+1))|] ;
|
||||
set_color colors.(i).(j);
|
||||
set_line_width 8;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j+1))/3|] ;
|
||||
|
||||
draw_tile i j;
|
||||
|
||||
|
@ -580,10 +580,10 @@ let another_type_of_dfs (gr : type2graph) r d =
|
|||
if (i < gr.width-1) && gr.g.(i).(j).edges.(5) <> (-1) && (visited.(i+1).(j) = false) then begin (* E *)
|
||||
set_line_width 4;
|
||||
set_color black;
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*j)|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*j)|] ;
|
||||
set_color colors.(i).(j);
|
||||
set_line_width 8;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*j)/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dy)*j)/3|] ;
|
||||
|
||||
draw_tile i j;
|
||||
|
||||
|
@ -593,10 +593,10 @@ let another_type_of_dfs (gr : type2graph) r d =
|
|||
if (i < gr.width-1 && j > 0) && gr.g.(i).(j).edges.(6) <> (-1) && (visited.(i+1).(j-1) = false) then begin (* SE *)
|
||||
set_line_width 4;
|
||||
set_color black;
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(j-1))|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*(j-1))|] ;
|
||||
set_color colors.(i).(j);
|
||||
set_line_width 8;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j-1))/3|] ;
|
||||
|
||||
draw_tile i j;
|
||||
|
||||
|
@ -606,10 +606,10 @@ let another_type_of_dfs (gr : type2graph) r d =
|
|||
if (j > 0) && gr.g.(i).(j).edges.(7) <> (-1) && (visited.(i).(j-1) = false) then begin (* S *)
|
||||
set_line_width 4;
|
||||
set_color black;
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*i), (r + (2*r + d)*(j-1))|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*i), (r + (2*r + dy)*(j-1))|] ;
|
||||
set_color colors.(i).(j);
|
||||
set_line_width 8;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*i)/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*i)/3, (2 * (snd node_xy) + r + (2*r + dy)*(j-1))/3|] ;
|
||||
|
||||
draw_tile i j;
|
||||
|
||||
|
@ -627,7 +627,7 @@ let another_type_of_dfs (gr : type2graph) r d =
|
|||
(* ------------------------------------------------------------*)
|
||||
(* ------------------------------------------------------------*)
|
||||
|
||||
let another_type_of_bfs (gr : type2graph) r d =
|
||||
let another_type_of_bfs (gr : type2graph) r dx dy gwd ght dt =
|
||||
let colors = Array.make_matrix gr.width gr.height (rgb 0 0 0) in
|
||||
for i = 0 to gr.width -1 do
|
||||
for j = 0 to gr.height -1 do
|
||||
|
@ -655,37 +655,37 @@ let another_type_of_bfs (gr : type2graph) r d =
|
|||
set_color (rgb 192 192 192) ;
|
||||
for i = 0 to gr.width -1 do
|
||||
for j = 0 to gr.height -1 do
|
||||
let node_xy = ((r + (2*r + d)*i), (r + (2*r + d)*j)) in
|
||||
let node_xy = ((r + (2*r + dx)*i), (r + (2*r + dy)*j)) in
|
||||
if (i > 0 && j > 0) && gr.g.(i).(j).edges.(0) <> (-1) then begin (* SO *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*(j-1))|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*(j-1))|] ;
|
||||
end;
|
||||
|
||||
if (i > 0) && gr.g.(i).(j).edges.(1) <> (-1) then begin (* O *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*j)|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*j)|] ;
|
||||
end;
|
||||
|
||||
if (i > 0 && j < gr.height -1) && gr.g.(i).(j).edges.(2) <> (-1) then begin (* NO *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*(j+1))|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*(j+1))|] ;
|
||||
end;
|
||||
|
||||
if (j < gr.height -1) && gr.g.(i).(j).edges.(3) <> (-1) then begin (* N *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*i), (r + (2*r + d)*(j+1))|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*i), (r + (2*r + dy)*(j+1))|] ;
|
||||
end;
|
||||
|
||||
if (i < gr.width-1 && j < gr.height -1) && gr.g.(i).(j).edges.(4) <> (-1) then begin (* NE *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(j+1))|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*(j+1))|] ;
|
||||
end;
|
||||
|
||||
if (i < gr.width-1) && gr.g.(i).(j).edges.(5) <> (-1) then begin (* E *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*j)|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*j)|] ;
|
||||
end;
|
||||
|
||||
if (i < gr.width-1 && j > 0) && gr.g.(i).(j).edges.(6) <> (-1) then begin (* SE *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(j-1))|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*(j-1))|] ;
|
||||
end;
|
||||
|
||||
if (j > 0) && gr.g.(i).(j).edges.(7) <> (-1) then begin (* S *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*i), (r + (2*r + d)*(j-1))|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*i), (r + (2*r + dy)*(j-1))|] ;
|
||||
end;
|
||||
|
||||
done
|
||||
|
@ -694,37 +694,37 @@ let another_type_of_bfs (gr : type2graph) r d =
|
|||
set_line_width 8;
|
||||
for i = 0 to gr.width -1 do
|
||||
for j = 0 to gr.height -1 do
|
||||
let node_xy = ((r + (2*r + d)*i), (r + (2*r + d)*j)) in
|
||||
let node_xy = ((r + (2*r + dx)*i), (r + (2*r + dy)*j)) in
|
||||
if (i > 0 && j > 0) && gr.g.(i).(j).edges.(0) <> (-1) then begin (* SO *)
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j-1))/3|] ;
|
||||
end;
|
||||
|
||||
if (i > 0) && gr.g.(i).(j).edges.(1) <> (-1) then begin (* O *)
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*j)/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dy)*j)/3|] ;
|
||||
end;
|
||||
|
||||
if (i > 0 && j < gr.height -1) && gr.g.(i).(j).edges.(2) <> (-1) then begin (* NO *)
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j+1))/3|] ;
|
||||
end;
|
||||
|
||||
if (j < gr.height -1) && gr.g.(i).(j).edges.(3) <> (-1) then begin (* N *)
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*i)/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*i)/3, (2 * (snd node_xy) + r + (2*r + dy)*(j+1))/3|] ;
|
||||
end;
|
||||
|
||||
if (i < gr.width-1 && j < gr.height -1) && gr.g.(i).(j).edges.(4) <> (-1) then begin (* NE *)
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j+1))/3|] ;
|
||||
end;
|
||||
|
||||
if (i < gr.width-1) && gr.g.(i).(j).edges.(5) <> (-1) then begin (* E *)
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*j)/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dy)*j)/3|] ;
|
||||
end;
|
||||
|
||||
if (i < gr.width-1 && j > 0) && gr.g.(i).(j).edges.(6) <> (-1) then begin (* SE *)
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j-1))/3|] ;
|
||||
end;
|
||||
|
||||
if (j > 0) && gr.g.(i).(j).edges.(7) <> (-1) then begin (* S *)
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*i)/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|] ;
|
||||
draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*i)/3, (2 * (snd node_xy) + r + (2*r + dy)*(j-1))/3|] ;
|
||||
end;
|
||||
|
||||
done
|
||||
|
@ -734,21 +734,21 @@ let another_type_of_bfs (gr : type2graph) r d =
|
|||
for i = 0 to gr.width -1 do
|
||||
for j = 0 to gr.height -1 do
|
||||
set_color (rgb 192 192 192) ;
|
||||
fill_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ;
|
||||
fill_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ;
|
||||
set_color (rgb 100 100 100) ;
|
||||
draw_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ;
|
||||
draw_integer (r + (2*r + d)*i) (r + (2*r + d)*j) gr.g.(i).(j).tag r
|
||||
draw_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ;
|
||||
draw_integer (r + (2*r + dx)*i) (r + (2*r + dy)*j) gr.g.(i).(j).tag r
|
||||
done
|
||||
done ;
|
||||
|
||||
let draw_tile i j =
|
||||
set_line_width 5;
|
||||
set_color (rgb 48 48 48) ;
|
||||
fill_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ;
|
||||
fill_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ;
|
||||
set_color black;
|
||||
draw_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ;
|
||||
draw_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ;
|
||||
set_color colors.(i).(j);
|
||||
draw_integer (r + (2*r + d)*i) (r + (2*r + d)*j) gr.g.(i).(j).tag r ;
|
||||
draw_integer (r + (2*r + dx)*i) (r + (2*r + dy)*j) gr.g.(i).(j).tag r ;
|
||||
in
|
||||
|
||||
(* Actual BFS *)
|
||||
|
@ -779,44 +779,44 @@ let another_type_of_bfs (gr : type2graph) r d =
|
|||
visited.(i).(j) <- true;
|
||||
|
||||
set_color white;
|
||||
fill_circle (1200-r) (800-r) r;
|
||||
fill_circle (r + (2*r + dx)*(gr.width/2)) (r + (2*r + dy)*(gr.height/2)) r;
|
||||
set_color black;
|
||||
draw_integer (1200-r) (800-r) depth r;
|
||||
draw_integer (r + (2*r + dx)*(gr.width/2)) (r + (2*r + dy)*(gr.height/2)) depth r;
|
||||
|
||||
Unix.sleepf 0.5;
|
||||
Unix.sleepf dt;
|
||||
|
||||
let node_xy = ((r + (2*r + d)*i), (r + (2*r + d)*j)) in
|
||||
let node_xy = ((r + (2*r + dx)*i), (r + (2*r + dy)*j)) in
|
||||
|
||||
if (i > 0 && j > 0) && gr.g.(i).(j).edges.(0) <> (-1) && (visited.(i-1).(j-1) = false) then begin (* SO *)
|
||||
Queue.add (depth+1, i, j, i-1, j-1, [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*(j-1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|]) pq;
|
||||
Queue.add (depth+1, i, j, i-1, j-1, [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*(j-1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j-1))/3|]) pq;
|
||||
end;
|
||||
|
||||
if (i > 0) && gr.g.(i).(j).edges.(1) <> (-1) && (visited.(i-1).(j) = false) then begin (* O *)
|
||||
Queue.add (depth+1, i, j, i-1, j, [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*j)|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*j)/3|]) pq;
|
||||
Queue.add (depth+1, i, j, i-1, j, [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*j)|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dy)*j)/3|]) pq;
|
||||
end;
|
||||
|
||||
if (i > 0 && j < gr.height -1) && gr.g.(i).(j).edges.(2) <> (-1) && (visited.(i-1).(j+1) = false) then begin (* NO *)
|
||||
Queue.add (depth+1, i, j, i-1, j+1, [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*(j+1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|]) pq;
|
||||
Queue.add (depth+1, i, j, i-1, j+1, [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*(j+1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j+1))/3|]) pq;
|
||||
end;
|
||||
|
||||
if (j < gr.height -1) && gr.g.(i).(j).edges.(3) <> (-1) && (visited.(i).(j+1) = false) then begin (* N *)
|
||||
Queue.add (depth+1, i, j, i, j+1, [|node_xy; (r + (2*r + d)*i), (r + (2*r + d)*(j+1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*i)/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|]) pq;
|
||||
Queue.add (depth+1, i, j, i, j+1, [|node_xy; (r + (2*r + dx)*i), (r + (2*r + dy)*(j+1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*i)/3, (2 * (snd node_xy) + r + (2*r + dy)*(j+1))/3|]) pq;
|
||||
end;
|
||||
|
||||
if (i < gr.width-1 && j < gr.height -1) && gr.g.(i).(j).edges.(4) <> (-1) && (visited.(i+1).(j+1) = false) then begin (* NE *)
|
||||
Queue.add (depth+1, i, j, i+1, j+1, [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(j+1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|]) pq;
|
||||
Queue.add (depth+1, i, j, i+1, j+1, [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*(j+1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j+1))/3|]) pq;
|
||||
end;
|
||||
|
||||
if (i < gr.width-1) && gr.g.(i).(j).edges.(5) <> (-1) && (visited.(i+1).(j) = false) then begin (* E *)
|
||||
Queue.add (depth+1, i, j, i+1, j, [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*j)|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*j)/3|]) pq;
|
||||
Queue.add (depth+1, i, j, i+1, j, [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*j)|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dy)*j)/3|]) pq;
|
||||
end;
|
||||
|
||||
if (i < gr.width-1 && j > 0) && gr.g.(i).(j).edges.(6) <> (-1) && (visited.(i+1).(j-1) = false) then begin (* SE *)
|
||||
Queue.add (depth+1, i, j, i+1, j-1, [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(j-1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|]) pq;
|
||||
Queue.add (depth+1, i, j, i+1, j-1, [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*(j-1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j-1))/3|]) pq;
|
||||
end;
|
||||
|
||||
if (j > 0) && gr.g.(i).(j).edges.(7) <> (-1) && (visited.(i).(j-1) = false) then begin (* S *)
|
||||
Queue.add (depth+1, i, j, i, j-1, [|node_xy; (r + (2*r + d)*i), (r + (2*r + d)*(j-1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*i)/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|]) pq;
|
||||
Queue.add (depth+1, i, j, i, j-1, [|node_xy; (r + (2*r + dx)*i), (r + (2*r + dy)*(j-1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*i)/3, (2 * (snd node_xy) + r + (2*r + dy)*(j-1))/3|]) pq;
|
||||
end
|
||||
end;
|
||||
done;
|
||||
|
@ -985,7 +985,7 @@ let pq_init a default_priority =
|
|||
(* ------------------------------------------------------------*)
|
||||
(* ------------------------------------------------------------*)
|
||||
|
||||
let another_type_of_dijkstra (gr : type2graph) r d =
|
||||
let another_type_of_dijkstra (gr : type2graph) r dx dy dt gwd ght =
|
||||
let colors = Array.make_matrix gr.width gr.height (rgb 0 0 0) in
|
||||
for i = 0 to gr.width -1 do
|
||||
for j = 0 to gr.height -1 do
|
||||
|
@ -1016,37 +1016,37 @@ let another_type_of_dijkstra (gr : type2graph) r d =
|
|||
set_color black ;
|
||||
for i = 0 to gr.width -1 do
|
||||
for j = 0 to gr.height -1 do
|
||||
let node_xy = ((r + (2*r + d)*i), (r + (2*r + d)*j)) in
|
||||
let node_xy = ((r + (2*r + dx)*i), (r + (2*r + dy)*j)) in
|
||||
if (i > 0 && j > 0) && gr.g.(i).(j).edges.(0) <> (-1) then begin (* SO *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*(j-1))|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*(j-1))|] ;
|
||||
end;
|
||||
|
||||
if (i > 0) && gr.g.(i).(j).edges.(1) <> (-1) then begin (* O *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*j)|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*j)|] ;
|
||||
end;
|
||||
|
||||
if (i > 0 && j < gr.height -1) && gr.g.(i).(j).edges.(2) <> (-1) then begin (* NO *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*(j+1))|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*(j+1))|] ;
|
||||
end;
|
||||
|
||||
if (j < gr.height -1) && gr.g.(i).(j).edges.(3) <> (-1) then begin (* N *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*i), (r + (2*r + d)*(j+1))|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*i), (r + (2*r + dy)*(j+1))|] ;
|
||||
end;
|
||||
|
||||
if (i < gr.width-1 && j < gr.height -1) && gr.g.(i).(j).edges.(4) <> (-1) then begin (* NE *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(j+1))|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*(j+1))|] ;
|
||||
end;
|
||||
|
||||
if (i < gr.width-1) && gr.g.(i).(j).edges.(5) <> (-1) then begin (* E *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*j)|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*j)|] ;
|
||||
end;
|
||||
|
||||
if (i < gr.width-1 && j > 0) && gr.g.(i).(j).edges.(6) <> (-1) then begin (* SE *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(j-1))|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*(j-1))|] ;
|
||||
end;
|
||||
|
||||
if (j > 0) && gr.g.(i).(j).edges.(7) <> (-1) then begin (* S *)
|
||||
draw_poly_line [|node_xy; (r + (2*r + d)*i), (r + (2*r + d)*(j-1))|] ;
|
||||
draw_poly_line [|node_xy; (r + (2*r + dx)*i), (r + (2*r + dy)*(j-1))|] ;
|
||||
end;
|
||||
|
||||
done
|
||||
|
@ -1063,7 +1063,7 @@ let another_type_of_dijkstra (gr : type2graph) r d =
|
|||
set_line_width 8;
|
||||
for i = 0 to gr.width -1 do
|
||||
for j = 0 to gr.height -1 do
|
||||
let node_xy = ((r + (2*r + d)*i), (r + (2*r + d)*j)) in
|
||||
let node_xy = ((r + (2*r + dx)*i), (r + (2*r + dy)*j)) in
|
||||
if (i > 0 && j > 0) && gr.g.(i).(j).edges.(0) <> (-1) then begin (* SO *)
|
||||
if is_weighted then begin
|
||||
set_color bcolor;
|
||||
|
@ -1151,26 +1151,26 @@ let another_type_of_dijkstra (gr : type2graph) r d =
|
|||
for i = 0 to gr.width -1 do
|
||||
for j = 0 to gr.height -1 do
|
||||
set_color (rgb 48 48 48) ;
|
||||
fill_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ;
|
||||
fill_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ;
|
||||
set_color black ;
|
||||
draw_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ;
|
||||
draw_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ;
|
||||
set_color (rgb 48 48 48) ;
|
||||
draw_integer (r + (2*r + d)*i) (r + (2*r + d)*j) gr.g.(i).(j).tag r
|
||||
draw_integer (r + (2*r + dx)*i) (r + (2*r + dy)*j) gr.g.(i).(j).tag r
|
||||
done
|
||||
done ;
|
||||
|
||||
let draw_tile i j =
|
||||
set_line_width 5;
|
||||
set_color (rgb 48 48 48) ;
|
||||
fill_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ;
|
||||
fill_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ;
|
||||
set_color black;
|
||||
draw_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ;
|
||||
draw_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ;
|
||||
set_color colors.(i).(j);
|
||||
draw_integer (r + (2*r + d)*i) (r + (2*r + d)*j) gr.g.(i).(j).tag r ;
|
||||
draw_integer (r + (2*r + dx)*i) (r + (2*r + dy)*j) gr.g.(i).(j).tag r ;
|
||||
|
||||
let fcolor = rgb 255 0 0 in
|
||||
|
||||
let node_xy = ((r + (2*r + d)*i), (r + (2*r + d)*j)) in
|
||||
let node_xy = ((r + (2*r + dx)*i), (r + (2*r + dy)*j)) in
|
||||
if (i > 0 && j > 0) && gr.g.(i).(j).edges.(0) <> (-1) then begin (* SO *)
|
||||
if is_weighted then begin
|
||||
set_color bcolor;
|
||||
|
@ -1294,58 +1294,58 @@ let another_type_of_dijkstra (gr : type2graph) r d =
|
|||
if mindists.(i).(j) > depth then begin
|
||||
mindists.(i).(j) <- depth;
|
||||
set_color (rgb 48 48 48) ;
|
||||
fill_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ;
|
||||
fill_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ;
|
||||
set_color black ;
|
||||
draw_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ;
|
||||
draw_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ;
|
||||
set_color colors.(i).(j);
|
||||
draw_integer (r + (2*r + d)*i) (r + (2*r + d)*j) depth r
|
||||
draw_integer (r + (2*r + dx)*i) (r + (2*r + dy)*j) depth r
|
||||
end;
|
||||
|
||||
let node_xy = ((r + (2*r + d)*i0), (r + (2*r + d)*j0)) in
|
||||
let dx = i - i0 and dy = j - j0 in
|
||||
if (dx, dy) = (1, 1) then begin
|
||||
let node_xy = ((r + (2*r + dx)*i0), (r + (2*r + dy)*j0)) in
|
||||
let dxx = i - i0 and dyy = j - j0 in
|
||||
if (dxx, dyy) = (1, 1) then begin
|
||||
set_color dcolor;
|
||||
set_line_width 3;
|
||||
draw_integer (fst node_xy + roff) (snd node_xy + roff) gr.g.(i0).(j0).edges.(4) rsize;
|
||||
done_smth := true;
|
||||
end
|
||||
else if (dx, dy) = (1, 0) then begin
|
||||
else if (dxx, dyy) = (1, 0) then begin
|
||||
set_color dcolor;
|
||||
set_line_width 3;
|
||||
draw_integer (fst node_xy + roff2) (snd node_xy) gr.g.(i0).(j0).edges.(5) rsize;
|
||||
done_smth := true;
|
||||
end
|
||||
else if (dx, dy) = (1, -1) then begin
|
||||
else if (dxx, dyy) = (1, -1) then begin
|
||||
set_color dcolor;
|
||||
set_line_width 3;
|
||||
draw_integer (fst node_xy + roff) (snd node_xy - roff) gr.g.(i0).(j0).edges.(6) rsize;
|
||||
done_smth := true;
|
||||
end
|
||||
else if (dx, dy) = (0, -1) then begin
|
||||
else if (dxx, dyy) = (0, -1) then begin
|
||||
set_color dcolor;
|
||||
set_line_width 3;
|
||||
draw_integer (fst node_xy) (snd node_xy - roff2) gr.g.(i0).(j0).edges.(7) rsize;
|
||||
done_smth := true;
|
||||
end
|
||||
else if (dx, dy) = (-1, -1) then begin
|
||||
else if (dxx, dyy) = (-1, -1) then begin
|
||||
set_color dcolor;
|
||||
set_line_width 3;
|
||||
draw_integer (fst node_xy - roff) (snd node_xy - roff) gr.g.(i0).(j0).edges.(0) rsize;
|
||||
done_smth := true;
|
||||
end
|
||||
else if (dx, dy) = (-1, 0) then begin
|
||||
else if (dxx, dyy) = (-1, 0) then begin
|
||||
set_color dcolor;
|
||||
set_line_width 3;
|
||||
draw_integer (fst node_xy - roff2) (snd node_xy) gr.g.(i0).(j0).edges.(1) rsize;
|
||||
done_smth := true;
|
||||
end
|
||||
else if (dx, dy) = (-1, 1) then begin
|
||||
else if (dxx, dyy) = (-1, 1) then begin
|
||||
set_color dcolor;
|
||||
set_line_width 3;
|
||||
draw_integer (fst node_xy - roff) (snd node_xy + roff) gr.g.(i0).(j0).edges.(2) rsize;
|
||||
done_smth := true;
|
||||
end
|
||||
else if (dx, dy) = (0, 1) then begin
|
||||
else if (dxx, dyy) = (0, 1) then begin
|
||||
set_color dcolor;
|
||||
set_line_width 3;
|
||||
draw_integer (fst node_xy) (snd node_xy + roff2) gr.g.(i0).(j0).edges.(3) rsize;
|
||||
|
@ -1353,53 +1353,53 @@ let another_type_of_dijkstra (gr : type2graph) r d =
|
|||
end;
|
||||
|
||||
set_color white;
|
||||
fill_circle (1200-r) (800-r) r;
|
||||
fill_circle (r + (2*r + dx)*(gr.width/2)) (r + (2*r + dy)*(gr.height/2)) r;
|
||||
set_color black;
|
||||
draw_integer (1200-r) (800-r) depth r;
|
||||
draw_integer (r + (2*r + dx)*(gr.width/2)) (r + (2*r + dy)*(gr.height/2)) depth r;
|
||||
|
||||
if !done_smth then
|
||||
Unix.sleepf 0.5;
|
||||
Unix.sleepf dt;
|
||||
|
||||
let node_xy = ((r + (2*r + d)*i), (r + (2*r + d)*j)) in
|
||||
let node_xy = ((r + (2*r + dx)*i), (r + (2*r + dy)*j)) in
|
||||
|
||||
if (i > 0 && j > 0) && gr.g.(i).(j).edges.(0) <> (-1) && ((i >= 0) && (j >= 0) && (i < gr.width) && (j < gr.height)) && loops.(i).(j).(0) = false then begin (* SO *)
|
||||
loops.(i).(j).(0) <- true;
|
||||
pq_add (i, j, i-1, j-1, [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*(j-1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|]) pq (depth+gr.g.(i).(j).edges.(0));
|
||||
pq_add (i, j, i-1, j-1, [|node_xy; (r + (2*r + dxx)*(i-1)), (r + (2*r + dyy)*(j-1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dxx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dyy)*(j-1))/3|]) pq (depth+gr.g.(i).(j).edges.(0));
|
||||
end;
|
||||
|
||||
if (i > 0) && gr.g.(i).(j).edges.(1) <> (-1) && ((i >= 0) && (j >= 0) && (i < gr.width) && (j < gr.height)) && loops.(i).(j).(1) = false then begin (* O *)
|
||||
loops.(i).(j).(1) <- true;
|
||||
pq_add (i, j, i-1, j, [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*j)|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*j)/3|]) pq (depth+gr.g.(i).(j).edges.(1));
|
||||
pq_add (i, j, i-1, j, [|node_xy; (r + (2*r + dxx)*(i-1)), (r + (2*r + dyy)*j)|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dxx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dyy)*j)/3|]) pq (depth+gr.g.(i).(j).edges.(1));
|
||||
end;
|
||||
|
||||
if (i > 0 && j < gr.height -1) && gr.g.(i).(j).edges.(2) <> (-1) && ((i >= 0) && (j >= 0) && (i < gr.width) && (j < gr.height)) && loops.(i).(j).(2) = false then begin (* NO *)
|
||||
loops.(i).(j).(2) <- true;
|
||||
pq_add (i, j, i-1, j+1, [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*(j+1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|]) pq (depth+gr.g.(i).(j).edges.(2));
|
||||
pq_add (i, j, i-1, j+1, [|node_xy; (r + (2*r + dxx)*(i-1)), (r + (2*r + dyy)*(j+1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dxx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dyy)*(j+1))/3|]) pq (depth+gr.g.(i).(j).edges.(2));
|
||||
end;
|
||||
|
||||
if (j < gr.height -1) && gr.g.(i).(j).edges.(3) <> (-1) && ((i >= 0) && (j >= 0) && (i < gr.width) && (j < gr.height)) && loops.(i).(j).(3) = false then begin (* N *)
|
||||
loops.(i).(j).(3) <- true;
|
||||
pq_add (i, j, i, j+1, [|node_xy; (r + (2*r + d)*i), (r + (2*r + d)*(j+1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*i)/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|]) pq (depth+gr.g.(i).(j).edges.(3));
|
||||
pq_add (i, j, i, j+1, [|node_xy; (r + (2*r + dxx)*i), (r + (2*r + dyy)*(j+1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dxx)*i)/3, (2 * (snd node_xy) + r + (2*r + dyy)*(j+1))/3|]) pq (depth+gr.g.(i).(j).edges.(3));
|
||||
end;
|
||||
|
||||
if (i < gr.width-1 && j < gr.height -1) && gr.g.(i).(j).edges.(4) <> (-1) && ((i >= 0) && (j >= 0) && (i < gr.width) && (j < gr.height)) && loops.(i).(j).(4) = false then begin (* NE *)
|
||||
loops.(i).(j).(4) <- true;
|
||||
pq_add (i, j, i+1, j+1, [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(j+1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|]) pq (depth+gr.g.(i).(j).edges.(4));
|
||||
pq_add (i, j, i+1, j+1, [|node_xy; (r + (2*r + dxx)*(i+1)), (r + (2*r + dyy)*(j+1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dxx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dyy)*(j+1))/3|]) pq (depth+gr.g.(i).(j).edges.(4));
|
||||
end;
|
||||
|
||||
if (i < gr.width-1) && gr.g.(i).(j).edges.(5) <> (-1) && ((i >= 0) && (j >= 0) && (i < gr.width) && (j < gr.height)) && loops.(i).(j).(5) = false then begin (* E *)
|
||||
loops.(i).(j).(5) <- true;
|
||||
pq_add (i, j, i+1, j, [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*j)|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*j)/3|]) pq (depth+gr.g.(i).(j).edges.(5));
|
||||
pq_add (i, j, i+1, j, [|node_xy; (r + (2*r + dxx)*(i+1)), (r + (2*r + dyy)*j)|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dxx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dyy)*j)/3|]) pq (depth+gr.g.(i).(j).edges.(5));
|
||||
end;
|
||||
|
||||
if (i < gr.width-1 && j > 0) && gr.g.(i).(j).edges.(6) <> (-1) && ((i >= 0) && (j >= 0) && (i < gr.width) && (j < gr.height)) && loops.(i).(j).(6) = false then begin (* SE *)
|
||||
loops.(i).(j).(6) <- true;
|
||||
pq_add (i, j, i+1, j-1, [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(j-1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|]) pq (depth+gr.g.(i).(j).edges.(6));
|
||||
pq_add (i, j, i+1, j-1, [|node_xy; (r + (2*r + dxx)*(i+1)), (r + (2*r + dyy)*(j-1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dxx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dyy)*(j-1))/3|]) pq (depth+gr.g.(i).(j).edges.(6));
|
||||
end;
|
||||
|
||||
if (j > 0) && gr.g.(i).(j).edges.(7) <> (-1) && ((i >= 0) && (j >= 0) && (i < gr.width) && (j < gr.height)) && loops.(i).(j).(7) = false then begin (* S *)
|
||||
loops.(i).(j).(7) <- true;
|
||||
pq_add (i, j, i, j-1, [|node_xy; (r + (2*r + d)*i), (r + (2*r + d)*(j-1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*i)/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|]) pq (depth+gr.g.(i).(j).edges.(7));
|
||||
pq_add (i, j, i, j-1, [|node_xy; (r + (2*r + dxx)*i), (r + (2*r + dyy)*(j-1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dxx)*i)/3, (2 * (snd node_xy) + r + (2*r + dyy)*(j-1))/3|]) pq (depth+gr.g.(i).(j).edges.(7));
|
||||
end
|
||||
end;
|
||||
done;
|
||||
|
@ -1413,17 +1413,45 @@ let another_type_of_dijkstra (gr : type2graph) r d =
|
|||
|
||||
(* ----------------------- Tests --------------------------- *)
|
||||
|
||||
open_graph " 1200x800" ;;
|
||||
set_window_title "Graphs" ;;
|
||||
let main r =
|
||||
Stdlib.print_endline "Enter the width of the graph (use 8 for weighted): ";
|
||||
let wd = Scanf.bscanf Scanf.Scanning.stdin "%d\n" identity in
|
||||
|
||||
let type2 = generate_type2_graph 7 5 40 1 10 ;;
|
||||
if wd <= 0 then failwith "Error : invalid input";
|
||||
|
||||
(*another_type_of_graph_printing type2 35 100 true ;;*)
|
||||
(*another_type_of_dfs type2 35 75 ;;*)
|
||||
(*another_type_of_bfs type2 35 75 ;;*)
|
||||
another_type_of_dijkstra type2 35 75 ;;
|
||||
Stdlib.print_endline "Enter the height of the graph (use 6 for weighted): ";
|
||||
let ht = Scanf.bscanf Scanf.Scanning.stdin "%d\n" identity in
|
||||
|
||||
close_graph () ;;
|
||||
if ht <= 0 then failwith "Error : invalid input";
|
||||
|
||||
Stdlib.print_endline "Is the grap weighted ? (0/1)";
|
||||
let is_weighted = Scanf.bscanf Scanf.Scanning.stdin "%d\n" identity in
|
||||
let weighted = ref false in
|
||||
|
||||
if is_weighted = 1 then weighted := true;
|
||||
|
||||
Stdlib.print_endline "Enter the mode :\n0 for display\n1 for BFS\n2 for DFS\n3 for Dijkstra\n";
|
||||
let choice = Scanf.bscanf Scanf.Scanning.stdin "%d\n" identity in
|
||||
|
||||
open_graph " 1500x1000" ;
|
||||
set_window_title "Graphs" ;
|
||||
|
||||
let gwd = 1500-r and ght = 1000-r in
|
||||
|
||||
let offset_x = (gwd - r)/(wd-1) - 2*r in
|
||||
let offset_y = (ght - r)/(ht-1) - 2*r in
|
||||
|
||||
let type2 = generate_type2_graph wd ht r 1 60 in
|
||||
|
||||
let dt = 0.25 in
|
||||
|
||||
if choice = 0 then begin another_type_of_graph_printing type2 r offset_x offset_y !weighted; close_graph () end
|
||||
else if choice = 1 then begin another_type_of_dfs type2 r offset_x offset_y dt ; close_graph () end
|
||||
else if choice = 2 then begin another_type_of_bfs type2 r offset_x offset_y gwd ght dt ; close_graph () end
|
||||
else if choice = 3 then begin another_type_of_dijkstra type2 r offset_x offset_y dt gwd ght ; close_graph () end
|
||||
else failwith "Error : invalid input";;
|
||||
|
||||
main 35;;
|
||||
|
||||
(* ----------------------- Tests --------------------------- *)
|
||||
|
||||
|
|
Loading…
Reference in New Issue