Maestro
28-02-2010, 21:49
Ciao,
vi espongo brevemente il problema.
Ho una matrice di 25 elementi (5*5) riempiti casualmente con 25 lettere.
Partendo da un elemento a scelta della matrice sono arrivato a trovare le sue adiacenze e di queste considerare solo quelle "valide" tramite una funzione che controlla su un dizionario (scarto in pratica quelle che non corrispondono alla parte iniziale di qualche parola; es.: se l'elemento di partenza è A e le sue adiacenze sono B, C, W prendo in considerazione solo le prime due perché non esiste nessuna parola nel dizionario che inizi per AW).
Aggiorno la parola (A => AB => ABC) e vado avanti con la prima adiacenza valida dell'ultimo elemento.
Mi interrompo inoltre quando non esistono parole più lunghe che iniziano con il troncone formato (es.: mi fermo ad AB[primaadiacenzadiB] se è una parola finita).
Al momento considero solo la prima di quelle valide e quindi inserendo il tutto in un for (;;) che si interrompe quando non esistono più adiacenze valide e inutilizzate o quando la parola è completa. Vorrei mettere in parallelo il tutto e procedere per ogni adiacenza dell'adiacenza in modo ricorsivo e così via.
In pratica:
$x = "1";
$y = "1";
for (;;) {
$parola = $matrice[$x][$y];
$matrice[$x][$y] = "";
$adiacenze_valide = adiacenze_valide ($x, $y); // ARRAY o EXIT se non ci sono
while (count ($adiacenze_valide > 0)) {
switch ($i) {
case 0:
$x = ($x-1);
$parola .= $adiacenze_valide($i);
echo $parola;
break;
case 1:
...
case 2:
...
}
unset $adiacenze_valide($i);
}
if check_parola ($parola) {
echo "Parola completa: $parola";
exit;
}
}
Il codice prende in considerazione un solo tipo di adiacenza e non c'è problema (ho valorizzato un solo case nello switch), ma prendendo in considerazione tutte le adiacenze valide nel caso ce ne fossero più di una devo agire ricorsivamente per ognuna di esse, "separando il lavoro"?
Grazie dell'attenzione
vi espongo brevemente il problema.
Ho una matrice di 25 elementi (5*5) riempiti casualmente con 25 lettere.
Partendo da un elemento a scelta della matrice sono arrivato a trovare le sue adiacenze e di queste considerare solo quelle "valide" tramite una funzione che controlla su un dizionario (scarto in pratica quelle che non corrispondono alla parte iniziale di qualche parola; es.: se l'elemento di partenza è A e le sue adiacenze sono B, C, W prendo in considerazione solo le prime due perché non esiste nessuna parola nel dizionario che inizi per AW).
Aggiorno la parola (A => AB => ABC) e vado avanti con la prima adiacenza valida dell'ultimo elemento.
Mi interrompo inoltre quando non esistono parole più lunghe che iniziano con il troncone formato (es.: mi fermo ad AB[primaadiacenzadiB] se è una parola finita).
Al momento considero solo la prima di quelle valide e quindi inserendo il tutto in un for (;;) che si interrompe quando non esistono più adiacenze valide e inutilizzate o quando la parola è completa. Vorrei mettere in parallelo il tutto e procedere per ogni adiacenza dell'adiacenza in modo ricorsivo e così via.
In pratica:
$x = "1";
$y = "1";
for (;;) {
$parola = $matrice[$x][$y];
$matrice[$x][$y] = "";
$adiacenze_valide = adiacenze_valide ($x, $y); // ARRAY o EXIT se non ci sono
while (count ($adiacenze_valide > 0)) {
switch ($i) {
case 0:
$x = ($x-1);
$parola .= $adiacenze_valide($i);
echo $parola;
break;
case 1:
...
case 2:
...
}
unset $adiacenze_valide($i);
}
if check_parola ($parola) {
echo "Parola completa: $parola";
exit;
}
}
Il codice prende in considerazione un solo tipo di adiacenza e non c'è problema (ho valorizzato un solo case nello switch), ma prendendo in considerazione tutte le adiacenze valide nel caso ce ne fossero più di una devo agire ricorsivamente per ognuna di esse, "separando il lavoro"?
Grazie dell'attenzione