Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- int possibilidades = 1;
- int a[8];
- int b[8];
- int t[6][6];
- void imprime(int n, int p){
- int i,j;
- for(i=0;i<n;i++){
- for(j=0;j<n;j++){
- printf("%3d",t[i][j]);
- }
- printf("\n");
- }
- printf("\n%d movimentos antes do retorno", p);
- }
- int cavalo(int i, int x, int y, int n, int p){
- int u,v,k,q;
- int c = 0;
- if(i==n*n+1){
- imprime(n,p);
- return 1;
- }
- for(k=0;k<8;k++){
- u = x + a[k];
- v = y + b[k];
- if( (u>=0 && u<=n-1) && (v>=0 && v<=n-1)){
- if(t[u][v]==0 && possibilidades == 1){
- c++;
- }
- }
- }
- p *= c; //Calcula possibilidades
- if(i==n*n+1){
- imprime(n,p);
- return 1;
- }
- for(k=0;k<8;k++){
- u = x + a[k]; v = y + b[k];
- if( (u>=0 && u<=n-1) && (v>=0 && v<=n-1)){
- if(t[u][v]==0){
- t[u][v]=i;
- q = cavalo(i+1,u,v,n,p);
- if(q==0){
- t[u][v]=0; int possibilidades = 0;
- }
- else return 1;
- }
- }
- }
- return 0;
- }
- int main(){
- int n;
- int cont = 1;
- int c, d, e, f, i;
- memset(t,0,sizeof(t));
- a[0]=2;a[1]=1;a[2]=-1;a[3]=-2,a[4]=-2;a[5]=-1;a[6]=1;a[7]=2;
- b[0]=1;b[1]=2;b[2]=2;b[3]=1,b[4]=-1;b[5]=-2;b[6]=-2;b[7]=-1;
- printf("Insira a dimensao do tabuleiro: ");
- scanf("%d", &n);
- if(n < 4 || n > 6){
- printf("Voce digitou um valor invalido. Tente novamente.");
- scanf("%d", &n);
- }
- printf("Caso nao sejam imprimidas matrizes, sua resolução nao existe");
- for(i = 1; i < n*n + 1; i++){
- for(c = 0; c < n; c++){
- for(d = 0; d < n; d++){
- t[c][d]=0;
- }
- }
- printf("\nResolucao para posicao inicial na casa %d\n", i);
- if(i%n == 0){
- e = i/n - 1;
- f = n-1;
- }
- else {
- e = i/n; f = i%n - 1;
- }
- t[e][f]=1;
- possibilidades = 1;
- cavalo(2,e,f,n,1);
- }
- system("PAUSE");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement