PRIMJER:
Code:
----------------
| | | |
| F********** |
| | | * |
------------*---
| | | * |
| ***** | * |
| * | * | * |
---*---*----*---
| * | * | * |
| M | ****** |
| | | |
----------------
N=3, a broj ruta je 2
----------------
| | | |
| F********** |
| | | * |
------------*---
| | | * |
| ***** | * |
| * | * | * |
---*---*----*---
| * | * | * |
| M | ****** |
| | | |
----------------
N=3, a broj ruta je 2
Evo mog rjesenja:
Code:
#include <stdio.h>
int n;
void provjeri(int niz[100][100]){
int i, j;
int b=1;
for(i=0; i<n; i++){
for(j=0; j<n; j++){
if(!(i==n-1 && j==0))
if(niz[i][j]!=1)
b=0;
}
//printf("%d ", put[i][j]);
//printf("\n");
}
if(b)
for(i=0; i<n; i++)
for(j=0; j<n; j++)
printf("%d ", niz[i][j]);
printf("\n");
}
void nadjiPut(int x, int y, int put[100][100]){
int i, j;
int pom[100][100];
for(i=0; i<n; i++)
for(j=0; j<n; j++)
pom[i][j] = put[i][j];
/*
for(i=0; i<n; i++){
for(j=0; j<n; j++)
printf("%d ", pom[i][j]);
printf("\n");
}
*/
//uslov da smo u okviru table, kao i da ovo nije krajnje polje
//takodje provjeravamo da li je polje put[x][y] vec posjeceno
if(x < n && x >= 0 && y < n && y <= 0 && pom[x][y]==0){
if(x==(n-1) && y==0){
provjeri(pom);
//return;
}
else{
//GORE
pom[x][y]= (x-1)*n+y+1; //upisujem "adresu" sledeceg polja
nadjiPut(x-1, y, pom);
//DESNO
pom[x][y]= x*n+(y+1)+1; //upisujem "adresu" sledeceg polja
nadjiPut(x, y+1, pom);
//LIJEVO
pom[x][y]= x*n+(y-1)+1; //upisujem "adresu" sledeceg polja
nadjiPut(x, y-1, pom);
//DOLE
pom[x][y]= (x+1)*n+y+1; //upisujem "adresu" sledeceg polja
nadjiPut(x+1, y, pom);
}
}
else{
return;
}
}
void main(){
int i, j;
int p[100][100];
for(i=0; i<n; i++)
for(j=0; j<n; j++)
p[i][j]= 0;
scanf("%d", &n);
nadjiPut(0, 0, p);
}
#include <stdio.h>
int n;
void provjeri(int niz[100][100]){
int i, j;
int b=1;
for(i=0; i<n; i++){
for(j=0; j<n; j++){
if(!(i==n-1 && j==0))
if(niz[i][j]!=1)
b=0;
}
//printf("%d ", put[i][j]);
//printf("\n");
}
if(b)
for(i=0; i<n; i++)
for(j=0; j<n; j++)
printf("%d ", niz[i][j]);
printf("\n");
}
void nadjiPut(int x, int y, int put[100][100]){
int i, j;
int pom[100][100];
for(i=0; i<n; i++)
for(j=0; j<n; j++)
pom[i][j] = put[i][j];
/*
for(i=0; i<n; i++){
for(j=0; j<n; j++)
printf("%d ", pom[i][j]);
printf("\n");
}
*/
//uslov da smo u okviru table, kao i da ovo nije krajnje polje
//takodje provjeravamo da li je polje put[x][y] vec posjeceno
if(x < n && x >= 0 && y < n && y <= 0 && pom[x][y]==0){
if(x==(n-1) && y==0){
provjeri(pom);
//return;
}
else{
//GORE
pom[x][y]= (x-1)*n+y+1; //upisujem "adresu" sledeceg polja
nadjiPut(x-1, y, pom);
//DESNO
pom[x][y]= x*n+(y+1)+1; //upisujem "adresu" sledeceg polja
nadjiPut(x, y+1, pom);
//LIJEVO
pom[x][y]= x*n+(y-1)+1; //upisujem "adresu" sledeceg polja
nadjiPut(x, y-1, pom);
//DOLE
pom[x][y]= (x+1)*n+y+1; //upisujem "adresu" sledeceg polja
nadjiPut(x+1, y, pom);
}
}
else{
return;
}
}
void main(){
int i, j;
int p[100][100];
for(i=0; i<n; i++)
for(j=0; j<n; j++)
p[i][j]= 0;
scanf("%d", &n);
nadjiPut(0, 0, p);
}
problem mi je sto mi rekurzija ne prosledjuje dobro vrijednosti matrice pom odnosno put. Da li neko ima lijek za ovo :(
Apartmani na Jahorini http://www.apartmanimaja.com