Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- Intr-un labirint de m*n exista camere cu pereti sau usi. Peretele este notat cu 0, iar usa cu 1. Cele
- 4 directii formeaza un ansamblu binar in directia NESV. Se pleaca din punctele p, q si sa se afiseze
- solutiile de iesire din labirint, solutia cea mai scurta si nr total de solutii.
- **/
- #include <fstream>
- #include <cstring>
- using namespace std;
- ifstream f("date.in");
- ofstream g("date.out");
- int a[10][10],i,j,m,n,p,q,contor,kmin=100;
- struct coord{int x,y;} s[100],smin[100];
- void tipar(int k)
- {
- for(int i=1;i<k;i++)
- g<<"("<<s[i].x<<";"<<s[i].y<<") ";
- g<<endl<<"-------------------------"<<endl;
- if(k<kmin)
- {
- kmin=k;
- /*for(i=1;i<=k;i++)
- smin[i]=s[i];*/
- memcpy(smin,s,sizeof(s));
- }
- }
- void back(int l, int c, int k)
- {
- int i;
- a[l][c]=-a[l][c];
- s[k].x=l;
- s[k].y=c;
- if(l==0 || c==0 || l==m+1 || c==n+1)
- {
- tipar(k);
- contor++;
- }
- else
- {
- if(a[l][c]/1000==0 && a[l-1][c]>=0)
- back(l-1,c,k+1);
- if(a[l][c]/100%10==0 && a[l][c+1]>=0)
- back(l,c+1,k+1);
- if(a[l][c]/10%10==0 && a[l+1][c]>=0)
- back(l+1,c,k+1);
- if(a[l][c]%10==0 && a[l][c-1]>=0)
- back(l,c-1,k+1);
- }
- a[l][c]=-a[l][c];
- }
- int main()
- {
- f>>m>>n>>p>>q;
- for(i=1;i<=m;i++)
- for(j=1;j<=n;j++)
- f>>a[i][j];
- back(p,q,1);
- g<<"Sunt "<<contor<<" solutii"<<endl<<"Cea mai mica solutie are "<<kmin-1<<" pasi"<<endl;
- for(i=1;i<kmin;i++)
- g<<"("<<smin[i].x<<";"<<smin[i].y<<") ";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement