|
|
|
![]() |
|
Strumenti |
![]() |
#81 |
Member
Iscritto dal: Nov 2003
Messaggi: 42
|
:O
sono sinceramente meravigliata!
![]() a2000...30 righe... ![]() io non mi ci sono messa, ché ho ripreso il C da pochi giorni, e tra un po' sotto col C++! ![]() ma...sono sicura che qualcuno qui riuscirà a tirar fuori un proggie scritto in C/C++ bello efficiente! su ragazzi, sono con voi! ![]() @a2000: complimenti! davvero! ![]() io la teoria dei grafi l'ho studiata nell'esame di RicercaOperativa...ma non ricordo molto! ![]()
__________________
ANGI |
![]() |
![]() |
![]() |
#82 |
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
grazie delle belle parole angy !
![]() ma sono già impegnato con monky ! (ancora per poco, però) |
![]() |
![]() |
![]() |
#83 |
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
primo tentativo fallito
![]() troppi 3d, il sistema non ha retto nemmeno in modalità console ![]() modificarlo per farlo andare non sarebbe un problema, ma non capisco come adottare la via che mi sembra che tu abbia imboccato. il mio programma (per ora non fà niente, ma ho già in mente le modifiche del caso per alleggerire il tutto) calcola tutte le combinazioni possibili (non tutte le strade, ma tutte le soluzioni possibli) e le segue fino in fondo arrivando a tantissime soluzioni. non ho la più pallida idea di come far scegliere una strada che deve per forza essere giusta ![]() chiedo l'aiuto da casa ![]() conoscevi a priori il metodo da adottare (cioè: lo sapevi fare anche su carta)? cmq ora continuo a provare a calcolare tute le combinazioni possibili, poi volgio però anche riuscire a far arrivare il pc a 1 SOLA soluzione, non a tutte. ciao |
![]() |
![]() |
![]() |
#84 |
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
calcolare tutte le combinazioni (cammini) possibili è ... impossibile
![]() ossia mooolto oneroso e praticamente impossibile con il crescere del numero di elementi della matrice. in questa ottica è meglio costruire il grafo del gioco, ossia assegnare ad ogni cella un nodo e collegarlo con quelle connesse secondo le regole di spostamento assegnate. una volta costruito il grafo si applica un algoritmo standard di cammino minimo ..... ma non sono 30 righe ![]() l'altra strada è (ma forse è la stessa ... ): devi visitare tutte le città d'Italia una sola volta, ti trovi a Bologna e sai che Firenze ha 8 vie d'accesso residue, Verona 5, Modena 4, Imola 2 quale visiti ? |
![]() |
![]() |
![]() |
#85 |
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
siccome l'ottimo è nemico del bene, il quale sta in mezzo, le risposte possibili sono 2: o Firenze o Imola.
a te la scelta. |
![]() |
![]() |
![]() |
#86 |
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
che devi fare !
non mi partire ancora col percorso binario invece che ottenario ! ![]() |
![]() |
![]() |
![]() |
#87 | ||
Senior Member
Iscritto dal: Oct 2002
Messaggi: 487
|
Quote:
![]() Quote:
![]() Tuttavia non mi sentirei di definire il problema come uno di "cammino minimo". Ma forse mi sbaglio, è passato un po' di tempo... Aloha!
__________________
AcM Racing :: Nulla è impossibile per chi non deve farlo |
||
![]() |
![]() |
![]() |
#88 | |
Senior Member
Iscritto dal: Oct 2002
Messaggi: 487
|
Quote:
Personalmente andrei a Imola...è meno probabile che andando avanti trovi altre strade che mi portino là. Aloha!
__________________
AcM Racing :: Nulla è impossibile per chi non deve farlo |
|
![]() |
![]() |
![]() |
#89 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
![]() |
![]() |
![]() |
#90 | |
Senior Member
Iscritto dal: Jun 2002
Città: Firenze
Messaggi: 630
|
Quote:
__________________
---> Lombardp CSS Certified Expert (Master Level) at Experts-Exchange Proud user of LITHIUM forum : CPU technology Webmaster of SEVEN-SEGMENTS : Elettronica per modellismo |
|
![]() |
![]() |
![]() |
#91 |
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
OK, ti abbuono anche le graffe !
![]() |
![]() |
![]() |
![]() |
#92 |
Member
Iscritto dal: Oct 2003
Messaggi: 126
|
Da quello che ho capito si usa il metodo del cammino ottimale, o meglio l'idea deriva da questo,o mi sbaglio gia?
Cioè prendo un nodo di partenza e percorro l'arco con peso minore, in questo caso il peso è il numero di scelte che ho nel caso successivo. La mia domanda è quando si deve scegliere fra due archi dello stesso peso si guardano i due passi successivi o si va a caso e se si sbaglia si torna indietro? PS.: Per la prima volta l'ho risolto su carta anche se non in questo modo. ( un po' a caso....) Ciao |
![]() |
![]() |
![]() |
#93 | |
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
Quote:
"quando si deve scegliere fra due archi dello stesso peso si guarda fino a un numero determinato (*) di passi successivi" (*) anche 0. ![]() |
|
![]() |
![]() |
![]() |
#94 |
Member
Iscritto dal: Nov 2003
Messaggi: 42
|
non riesco a tirar fuori l'algoritmo...qualcuno di voi potrebbe passarlo?
greedy, backtracking o cosa? un'altra cosa che mi viene un po' ostica da immaginare è la struttura dei nodi e delle liste di nodi... in un semplice grafo orientato etichettato mi sono immaginata una struttura del genere: typedef struct { int etichetta; listanodi *adiacente; nodo *prossimo; } nodo; typedef struct { nodo *nodo; listanodi *prossimo; } listanodi; ma questa potrebbe andare per una situescion simile: ![]() nel nostro caso non ho una lista data...la devo comporre; può essere pari al prodotto righe*colonne; ogni nodo può puntare fino a 8 diversi nodi, l'etichetta è la posizione sulla scacchiera... azz, un vero casino... scommetto che mi sto inutilmente scervellando, perché il problema può essere risolto altrimenti...o sbaglio? certo, avere una struttura "su carta" sulla quale lavorare, sarebbe meglio... qualcuno di voi c'è arrivato? poi magari il grafo non è orientato ma semplicemente pesato, con il peso = mosse possibili dalla prossima posizione... caos mentale supremoooo! ![]()
__________________
ANGI |
![]() |
![]() |
![]() |
#95 |
Senior Member
Iscritto dal: Jun 2002
Città: Firenze
Messaggi: 630
|
Il programma effettua una ricerca di tutte le possibili soluzioni (almeno dovrebbe) e stampa il risultato a video o su file. Al crescere della matrice il tempo di esecuzione letteralmente esplode (come era prevedibile). Per esempio con una 5x5 partendo da (2,2) ci sono 352 possibili soluzioni e si conclude in frazioni di secondo, già con una 6x6 si misura in minuti.
Esempio di uso su video: brute 2 2 Esempio di uso su file: brute 2 2 > soluzioni.txt Il LATO della matrice è definito da una #define, ma potrebbe essere anche incluso tra i parametri allocando la matrice dinamicamente. Codice:
#include <stdlib.h> #define LATO 5 int p[LATO*LATO]; int i; void piazza(int y,int x,int n=1) { if (p[y*LATO+x]==0) { p[y*LATO+x] = n; if (n==(LATO*LATO)) { for (i=0;i<(LATO*LATO);i++) if ((i%(LATO))==0) printf("\n%i ",p[i]); else printf("%i ",p[i]); printf("\n"); } else { if (x<LATO-3) piazza(y,x+3,n+1); if (y<LATO-3) piazza(y+3,x,n+1); if (x>2) piazza(y,x-3,n+1); if (y>2) piazza(y-3,x,n+1); if ((x<LATO-2)&(y<LATO-2)) piazza(y+2,x+2,n+1); if ((x>1)&(y<LATO-2)) piazza(y+2,x-2,n+1); if ((x>1)&(y>1)) piazza(y-2,x-2,n+1); if ((x<LATO-2)&(y>1)) piazza(y-2,x+2,n+1); } p[y*LATO+x] = 0; } } void main(int argc, char* argv[]) { for (i=0;i<(LATO*LATO);i++) p[i]=0; piazza(atoi(argv[1]),atoi(argv[2])); printf("\n\nFINE"); }
__________________
---> Lombardp CSS Certified Expert (Master Level) at Experts-Exchange Proud user of LITHIUM forum : CPU technology Webmaster of SEVEN-SEGMENTS : Elettronica per modellismo Ultima modifica di lombardp : 19-11-2003 alle 08:35. |
![]() |
![]() |
![]() |
#96 |
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
L'algoritmo di a2000 è un problema di "spanning tree".
...nel caso specifico dovrebbe essere euristico (dico bene a2000 o sbaglio?) quindi potrebbe esserci la possibilità che fallisca(?) miseria,non ho tempo...mi piacerebbe cimentarmi. Solo una curiosità(bisogna costruire la matrice di adiacenza)? |
![]() |
![]() |
![]() |
#97 | |
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
Quote:
se lo conosco bene...solo matrici,vettori ...niente strutture... trova una via + semplice... c'è(se no addio 30 righe) ![]() |
|
![]() |
![]() |
![]() |
#98 |
Member
Iscritto dal: Oct 2003
Messaggi: 126
|
Credo che strutture dati complessa tipo liste, code, ecc... non siano molto utili in questo caso, dall'idea che ci ha dato a2000 una matrice va benissimo, magari si può usare un vettore che tenga memoria di n alternative precedenti in caso di fallimento di un dato percorso.
Ciao |
![]() |
![]() |
![]() |
#99 |
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
Quante soluzioni trovate per n=6 cominciando dalla cella 0,0??
Ma le vostre soluzioni si fermano appena ne trovano una o le trovano tutte? |
![]() |
![]() |
![]() |
#100 | ||
Senior Member
Iscritto dal: Jun 2002
Città: Firenze
Messaggi: 630
|
Quote:
Matrice 6x6 partendo da 0,0 : 302'282 soluzioni Quote:
__________________
---> Lombardp CSS Certified Expert (Master Level) at Experts-Exchange Proud user of LITHIUM forum : CPU technology Webmaster of SEVEN-SEGMENTS : Elettronica per modellismo |
||
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:22.