Aiuto progettino ocaml
Salve,
qualcuno sa darmi una mano per il seguente progettino didattico :
" Dato un grafo ed un insieme di colori cioè di interi da 1 ad N assegnare un intero ad ogni vertice in modo che a vertici adiacenti siano assegnati colori diversi.
Si risolva il problema utilizzando un algoritmo di ricerca in ampiezza "
Sono riuscito a scivere le seguenti righe di codice :
CALCOLO IL SUCCESSORE DI OGNI VERTICE
(* succ : 'a graph -> 'a -> 'a list *)
let succ (Gr arcs) node =
let rec aux = function
[] -> []
| (x,y)::rest -> if x = node then y::aux rest
else aux rest
in aux arcs;;
LA RICERCA IN AMPIEZZA
(* breadth_first_collect : 'a graph -> 'a -> 'a list *)
let breadth_first_collect graph start =
let rec search visited = function
[] -> visited
| n::rest -> if List.mem n visited
then search visited rest
else search (n::visited) (rest @ (succ graph n))
(* i nuovi nodi sono inseriti in coda *)
in search [] [start];;
LA LUNGHEZZA DEL GRAFO
(* length : 'a list -> int *)
let rec length = function
[] -> 0
| x::rest -> 1 + length rest;;
QUALCUNO SA AIUTARMI A COMPLETARLO ???
SPERO IN UN VOSTRO AIUTO
qualcuno sa darmi una mano per il seguente progettino didattico :
" Dato un grafo ed un insieme di colori cioè di interi da 1 ad N assegnare un intero ad ogni vertice in modo che a vertici adiacenti siano assegnati colori diversi.
Si risolva il problema utilizzando un algoritmo di ricerca in ampiezza "
Sono riuscito a scivere le seguenti righe di codice :
CALCOLO IL SUCCESSORE DI OGNI VERTICE
(* succ : 'a graph -> 'a -> 'a list *)
let succ (Gr arcs) node =
let rec aux = function
[] -> []
| (x,y)::rest -> if x = node then y::aux rest
else aux rest
in aux arcs;;
LA RICERCA IN AMPIEZZA
(* breadth_first_collect : 'a graph -> 'a -> 'a list *)
let breadth_first_collect graph start =
let rec search visited = function
[] -> visited
| n::rest -> if List.mem n visited
then search visited rest
else search (n::visited) (rest @ (succ graph n))
(* i nuovi nodi sono inseriti in coda *)
in search [] [start];;
LA LUNGHEZZA DEL GRAFO
(* length : 'a list -> int *)
let rec length = function
[] -> 0
| x::rest -> 1 + length rest;;
QUALCUNO SA AIUTARMI A COMPLETARLO ???
SPERO IN UN VOSTRO AIUTO
Risposte
Ciao, per caso hai piu risolto questo progettino?
lo so ma non si sa mai eheh