Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- int sumaNiza(int* a, int n)
- {
- if (n==0)
- {
- return 0;
- }
- return a[n-1]+sumaNiza(a,n-1);
- }
- /*
- int sumaPodniza(int* a,int n, int s)
- {
- if(n==-1)
- return 0;
- if(a[n-1]==s)
- return 1;
- return sumaPodniza(a,n-1,s) || sumaPodniza(a,n-1,s-a[n-1]);
- }
- */
- int sumaPodniza(int* a,int n, int s)
- {
- if(n==-1)
- return 0;
- if(a[n-1]==s)
- {
- printf("%4d",a[n-1]);
- return 1;
- }
- else
- {
- int with=sumaPodniza(a,n-1,s-a[n-1]);
- if(with)
- {
- printf("%4d",a[n-1]);
- return 1;
- }
- int without=sumaPodniza(a,n-1,s);
- if(without)
- {
- return 1;
- }
- }
- return 0;
- }
- int sol[100];
- int cnt=0;
- void sumaPodskupa(int* a,int n, int s)
- {
- if(n==-1)
- return;
- if(0==s)
- {
- int i;
- for(i=0;i<cnt;i++)
- {
- printf("%4d",sol[i]);
- }
- printf("\n");
- }
- else
- {
- sol[cnt++]=a[n-1];
- //sol[cnt]=a[n-1]; cnt++;
- sumaPodskupa(a,n-1,s-a[n-1]);
- cnt--;
- sumaPodskupa(a,n-1,s);
- }
- }
- //data binarna matrica m x n
- //napisati funkciju koja provjerava da li robot moze sa pozicije 0,0 do m-1,n-1
- //kretajuci se dolje ili desno po nulama
- int postojiPut(int **mat, int m, int n,int i, int j)
- {
- if(i==m-1&&j==n-1)
- return 1;
- int desno=0;
- if(j<n-1 && mat[i][j+1]==0)
- {
- desno=postojiPut(mat,m,n,i,j+1);
- }
- if(desno)
- return 1;
- int dolje=0;
- if(i<m-1 && mat[i+1][j]==0)
- {
- dolje=postojiPut(mat,m,n,i+1,j);
- }
- if (dolje)
- return 1;
- return 0;
- }
- int put[100];
- int br;
- void postojiPutSve(int **mat, int m, int n,int i, int j)
- {
- if(i==m-1 && j==n-1)
- {
- int k;
- for(k=0;k<br;k++)
- {
- if(put[k]==6)
- printf("desno ");
- else
- printf("dolje ");
- }
- printf("\n");
- }
- else
- {
- put[br]=6;
- br++;
- if(j<n-1 && mat[i][j+1]==0)
- {
- postojiPutSve(mat,m,n,i,j+1);
- }
- br--;
- put[br++]=2;
- if(i<m-1 && mat[i+1][j]==0)
- {
- postojiPutSve(mat,m,n,i+1,j);
- }
- br--;
- }
- }
- int posjecen[100][100];
- void postojiPut22(int **mat, int m, int n,int i, int j)
- {
- if(i==m-1 && j==n-1)
- {
- int k;
- for(k=0;k<br;k++)
- {
- if(put[k]==6)
- printf("desno ");
- else if(put[k]==2)
- printf("dolje ");
- else if(put[k]==4)
- printf("lijevo ");
- else if(put[k]==8)
- printf("gore ");
- }
- printf("\n");
- }
- else
- {
- put[br]=6;
- br++;
- if(j<n-1 && mat[i][j+1]==0 && posjecen[i][j+1]==0)
- {
- posjecen [i][j+1]=1;
- postojiPut22(mat,m,n,i,j+1);
- posjecen[i][j+1]=0;
- }
- br--;
- put[br++]=2;
- if(i<m-1 && mat[i+1][j]==0 && posjecen[i+1][j]==0)
- {
- posjecen[i+1][j]=1;
- postojiPut22(mat,m,n,i+1,j);
- posjecen[i+1][j]=0;
- }
- br--;
- put[br]=4;
- br++;
- if(j>0 && mat[i][j-1]==0 && posjecen[i][j-1]==0)
- {
- posjecen [i][j-1]=1;
- postojiPut22(mat,m,n,i,j-1);
- posjecen[i][j-1]=0;
- }
- br--;
- put[br++]=8;
- if(i>0 && mat[i-1][j]==0 && posjecen[i-1][j]==0)
- {
- posjecen[i-1][j]=1;
- postojiPut22(mat,m,n,i-1,j);
- posjecen[i-1][j]=0;
- }
- br--;
- }
- }
- int main()
- {
- // int a[6]={10,7,16,25,13,19};
- //printf("\n%d\n",sumaPodniza(a,6,30));
- //sumaPodskupa(a,6,26);
- FILE* f= fopen("a_file.txt","r");
- int m,n;
- fscanf(f,"%d %d",&m,&n);
- int **mat;
- mat=malloc(m*sizeof(int*));
- int i;
- for(i=0;i<m;i++)
- mat[i]=malloc((n*sizeof(int)));
- int j;
- for(i=0;i<m;i++)
- {
- for(j=0;j<n;j++)
- fscanf(f,"%d",&mat[i][j]);
- posjecen[i][j]=0;
- }
- postojiPut22(mat,m,n,0,0);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement