Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Programma Cubo
Forum - C/C++ - Programma Cubo

Avatar
rollercoaster (Normal User)
Newbie


Messaggi: 5
Iscritto: 16/07/2008

Segnala al moderatore
Postato alle 21:46
Giovedì, 17/07/2008
Ciao a tutti,
non ho molta esperienza con il linguaggio C e mi sto esercitando per sostenere un esame.
Il quesito posto è
Abbiamo un cubo
Ad ogni nodo sono assegnate 3 cifre binarie (x, y, z) tale che due nodi adiacenti differiscono per una sola cifra (la
dimensione cartesiana lungo la quale ci si muove).
Si chiede di progettare,  un algoritmo che, dati due nodi in ingresso, calcoli il
percorso minimo tra i due nodi e stampi a video tutti i punti attraversati dal percorso. Esempio: nodo1 = 000, nodo2 = 101
Percorso = 000, 100, 101.
In allegato l'immagine del cubo



#include<stdio.h>
#include<conio.h>

int x, a, x2;
int y, b, y2;
int z, c, z2;
int scambi;

main(){
printf("Inserire primo nodo: \n");
scanf("%d%d%d",&x,&y,&z);

printf("Inserire secondo nodo: \n");
scanf("%d%d%d",&a,&b,&c);
scambi=0;
if(x==a) {
printf("Il punto non si è spostato lungo l'asse delle x\n");
x2=x;}
else{
printf("Il punto si è spostato lungo l'asse delle x\n");
x2=a;
scambi=scambi+1;
printf("%d\n",scambi);};


if(y==b){
printf("Il punto non si è spostato lungo l'asse delle y\n");
y2=y;}
else{
printf("Il punto si è spostato lungo l'asse delle y\n");
if(scambi==0){
y2=b;
scambi=scambi+1;};
printf("%d\n",scambi);
};


if(z==c){
printf("Il punto non si è spostato lungo l'asse delle z\n");
z2=z;}
else{
printf("Il punto si è spostato lungo l'asse delle z\n");
if(scambi==0){
z2=c;
scambi=scambi++;};
printf("%d\n",scambi);
};

printf("Nodo1:%d%d%d\n",x,y,z);

printf("Nodo2:%d%d%d\n",a,b,c);


printf("Percorso=%d%d%d,%d%d%d, %d%d%d \n",x,y,z,x2,y2,z2,a,b,c);
getch();
return 0;
}

L'idea del mio progetto (sbagliata) è quella di acquisire i dati poi controllare se le coordinate dei due nodi sono uguali in caso contrario li nuovo nodo avrà la coordinata discordante dell'ultimo nodo e incrementerà di 1 la variabile scambi. La variabile scambi servirebbe a controllare se sono stati effettuati scambi di coordinate dal primo nodo a quello intermedio e dovrebbe servire a non permettere ulteriori scambi (perchè ne serve solo uno),Il problema risiede nella variabile scambi ma non so come risolverlo? qualcuno può aiutarmi? magari suggerendomi anche un altro modo di agire?
Grazie




rollercoaster ha allegato un file: CUBO.JPG (11918 bytes)
Clicca qui per guardare l'immagine
PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 21:54
Giovedì, 17/07/2008
Penso che dovresti adottare

l'algoritmo di Dijkstra

http://it.wikipedia.org/wiki/Algoritmo_di_Dijkstra

per il tuo problema

PM Quote
Avatar
rollercoaster (Normal User)
Newbie


Messaggi: 5
Iscritto: 16/07/2008

Segnala al moderatore
Postato alle 22:16
Giovedì, 17/07/2008
Bellissimo algoritmo di cui ignoravo l'esistenza... ora proverò ad adattarlo al mio caso...spero di farcela Grazie

PM Quote
Avatar
rollercoaster (Normal User)
Newbie


Messaggi: 5
Iscritto: 16/07/2008

Segnala al moderatore
Postato alle 17:01
Venerdì, 18/07/2008
Non sono riuscito ad implementare utilizzando quell'algoritmo... troppo difficile per me... quindi ho continuato per la mia strada ed ho modificato il progammino e l'ho fatto funzionare.
Ora vorrei migliorarlo... vorrei chiedere se c'è un modo per far si che le cifre immesse che io ho dichiarato come int siano solo 1 e 0 e non qualunque cifra e se c'è inoltre un modo per far immettere quando mi chiede il nodo non le coordinate una sotto l'altra (Es. per il  nodo 000 devo immettere le coordinate
0
0
0
avendo dichiarato degli int per ogni coordinata
ma semplicemente
000 facendo capire al compilatore che ad ogni cifra che digito corrisponde una coordinata
Spero di essere stato chiaro

PM Quote
Avatar
eddiewrc (Member)
Expert


Messaggi: 560
Iscritto: 30/04/2006

Segnala al moderatore
Postato alle 19:59
Sabato, 02/08/2008
penso anche io che la cosa migliore sarebbe l'algoritmo di dijkstra o simili (pope, bellman), anche perchè se è un progetto per l'universtià di solito ci tengono all'efficienza. cmq in sostanza il tuo progetto è il "solito" problema di trovare il cammino minimo tra due nodi di un grafo, solo che i pesi degli archi che connettono i nodi non sono dei valori dati ma bisogna calcolarli a causa dell'orientamento tridimensionale del grafo.
deve essere divertente! se cerchi su internet cmq trovi un sacco di algoritmi che trovano il cammino minimo.. è un campo su cui si è studiato molto. se i "pesi" degli archi sono non negativi il più famoso è dijkstra!

PM Quote