Gioco del cavallo!!!

di il
15 risposte

Gioco del cavallo!!!

Ciao son un raga alle prime armi con il c, e nel mio libro di informatica c'è questo problema da risolvere: puo il cavallo muovendosi a elle in un scacchiera 8x8 passare in tutte le caselle senza passare due volte nella stessa????

vi allego il codice che ho scritto io che però non funziona...


#include <stdio.h>
#define SIZE 8

void soluzione (int x);
void scrivi ( int b[SIZE][SIZE]);

int main () {

soluzione(16);



system(\"PAUSE\");
return 0;

}

void scrivi ( int b[SIZE][SIZE]){

int i, q;

for ( i=0; i<SIZE; i++){
for ( q=0; q<SIZE; q++)
printf(\"%d \", b[q]);
printf(\"\\n\");
}
}


void soluzione ( int x) {

int board[SIZE][SIZE] ={0}, orizontale[SIZE], verticale[SIZE], riga=0, colonna=0,i,q=0, z=0;

// inserimento delle possibili mosse del cavallo orizontalmente
orizontale[0]=2;
orizontale[1]=1;
orizontale[2]=-1;
orizontale[3]=-2;
orizontale[4]=-2;
orizontale[5]=-1;
orizontale[6]=1;
orizontale[7]=2;
//inserimento delle posibili mosse del cavallo verticalmente
verticale[0]=-1;
verticale[1]=-2;
verticale[2]=-2;
verticale[3]=-1;
verticale[4]=1;
verticale[5]=2;
verticale[6]=2;
verticale[7]=1;

for ( i=0; i<=100000; i++){
riga += orizontale[z];
colonna += verticale[z];
if ( board[riga][colonna] == 0 && riga >= 0 && riga <8 && colonna >=0 && colonna <8)
board[riga][colonna]=i+1;
else {
printf( \"numero mossa %d\\n\", z);
riga -= orizontale[z];
colonna -= verticale[z];

if ( z == {
printf(\"numero giri, %d\\n\",i);
riga -= orizontale[z];
colonna -= verticale[z];
z=0;

}
z++;
}

}

scrivi(board);
}

15 Risposte

  • Re: Gioco del cavallo!!!

    E' da un bel po' che hai scritto la domanda sul giro del cavallo quindi immagino tu abbia risolto o abbia lasciato perdere..
    Se però ti interessa ancora ti posso dare il mio programma del giro del cavallo..
  • Re: Gioco del cavallo!!!

    Si ormai e passato un po di tempo e lo abbandonato senza risolverlo!!!1 se me lo ,mandi mi fa molto piacere.....
  • Re: Gioco del cavallo!!!

    [/img]
    #include <stdio.h>
    #include <stdlib.h>
    #define n 8
    
    bool SearchOne (int b[n][n], int i, int j,int k){
    	int i1,j1;	
    	for(int m=1; m<=8;m++){
    		if(m==1){i1=i-1; j1=j+2;}
    		else if(m==2){i1=i-2; j1=j+1;}
    		else if(m==3){i1=i-2; j1=j-1;}
    		else if(m==4){i1=i-1; j1=j-2;}
    		else if(m==5){i1=i+1; j1=j-2;}
    		else if(m==6){i1=i+2; j1=j-1;}
    		else if(m==7){i1=i+2; j1=j+1;}
    		else {i1=i+1; j1=j+2;}
    	
    		if(0<=i1 && i1<=n-1 && 0<=j1 && j1<=n-1 && b[i1][j1]==0){
    			b[i1][j1]=k;
    			if(k==n*n || SearchOne(b,i1,j1,k+1)) return true;
    			b[i1][j1]=0;
    		}
    	}
    	return false;
    }
    
    void main(){
    	int i,j,r,c;
    
    	printf("\n\n\t\t<<IL GIRO DEL CAVALLO>> \n\n");
    	getchar();
    	system("cls");
    	int b[n][n]={{0}};
    	printf("\n\n\n riga di partenza:");
    	scanf("%d",&r);
    	if(r<0 || r>=n)return;
    	printf("\n\n colonna di partenza:");
    	scanf("%d",&c);
    	if(c<0 || c>=n)return;
    	b[r][c]=1;
    	if(SearchOne(b,r,c,2)){
    		system("cls");
    		printf("\n\n");
    		for(i=0;i<n;i++){
    			for(j=0;j<n;j++){
    				printf(" %3d ",b[i][j]);
    			}
    			printf("\n\n");
    		}
    	}
    	else printf("\n\nNON ESISTE SOLUZIONE\n\n");
    }
    
    Questa è una versione molto limitata..
    Poi ne ho fatta anche una molto meglio strutturata ma nn mi sembrava il caso...
  • Re: Gioco del cavallo!!!

    E strano ma da me non funziona mi segnala vari errori nella prima funzione!!! e poi perche la funzione la metti all'inizio???
  • Re: Gioco del cavallo!!!

    Perchè non dovrei metterla all'inizio?

    cmq strano xke l'ho provato un secondo prima di postarlo..

    che errori ti da??
  • Re: Gioco del cavallo!!!

    Il primo e questo e poi c'è ne sono vari altri!!!

    parse error before "SearchOne"

    io sono abituato a fare prima della funzione main i prototipi di funzione e poi dopo la funzione!!!
    ovviamnete parliamo di c?giusto??'
  • Re: Gioco del cavallo!!!

    Si ovvio c/c++..
    si puo fare sia nel mio modo sia nel tuo..
    prova anche come vuoi tu.. cmq nn capisco perchè ti dia quegli errori..
  • Re: Gioco del cavallo!!!

    marcoamd ha scritto:


    nn capisco perchè ti dia quegli errori..
    Credo dipenda dal fatto che in C non è definito il tipo bool.
  • Re: Gioco del cavallo!!!

    Cosa? non è definito il tipo bool? ma scherzi? si ke è definito..

    non lo so che puo essere..
    in che ambiente sviluppi?
  • Re: Gioco del cavallo!!!

    Guarda che ha ragione, bool può non dartelo in C.
    Ti conviene fare:

    typedef enum {false, true} boolean;

    dove boolean sarà il nome da usare al posto di bool.
  • Re: Gioco del cavallo!!!

    Uso dev c++ soto windows!!!!
    non so mi da anche altri vari errori....

    non so che dirti!!!
  • Re: Gioco del cavallo!!!

    Ho tirato giù su Dev-C++ il codice.

    In C++ a me dava errori solo al main.
    Per risolverli devi cambiare il main passando da void a int e quindi mettere un numero nei return alle righe 35 e 38 e in più mettere un return con un numero alla fine del main.

    In C sostituendo bool con il la typedef che ti dicevo si risolve il problema della funzione SearchOne, per il resto do un'occhiata e poi ti dico....credo che fra 5 minuti ti so dire qualcosa.
  • Re: Gioco del cavallo!!!

    Errori trovati in C:

    Alla riga 9, all'interno del for è dichiarata la variabile m.
    Qua nasce il problema.

    Codice del programma base:
    int i1,j1;
    for(
  • Re: Gioco del cavallo!!!

    Cmq quegli errori di cui parlate non li ho mai avuti..
    sarà perchè uso visual studio..


    cmq il programma funziona sicuro..
Devi accedere o registrarti per scrivere nel forum
15 risposte