Oppure

Loading
17/07/08 19:46
rollercoaster
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


aaa
17/07/08 19:54
gantonio
Penso che dovresti adottare

l'algoritmo di Dijkstra

it.wikipedia.org/wiki/…

per il tuo problema
aaa
17/07/08 20:16
rollercoaster
Bellissimo algoritmo di cui ignoravo l'esistenza... ora proverò ad adattarlo al mio caso...spero di farcela Grazie
aaa
18/07/08 15:01
rollercoaster
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
aaa
02/08/08 17:59
eddiewrc
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!
aaa