Advertisement
Guest User

Untitled

a guest
Dec 6th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.59 KB | None | 0 0
  1. /**
  2. Intr-un labirint de m*n exista camere cu pereti sau usi. Peretele este notat cu 0, iar usa cu 1. Cele
  3. 4 directii formeaza un ansamblu binar in directia NESV. Se pleaca din punctele p, q si sa se afiseze
  4. solutiile de iesire din labirint, solutia cea mai scurta si nr total de solutii.
  5. **/
  6. #include <fstream>
  7. #include <cstring>
  8. using namespace std;
  9. ifstream f("date.in");
  10. ofstream g("date.out");
  11.  
  12. int a[10][10],i,j,m,n,p,q,contor,kmin=100;
  13. struct coord{int x,y;} s[100],smin[100];
  14.  
  15. void tipar(int k)
  16. {
  17. for(int i=1;i<k;i++)
  18. g<<"("<<s[i].x<<";"<<s[i].y<<") ";
  19. g<<endl<<"-------------------------"<<endl;
  20. if(k<kmin)
  21. {
  22. kmin=k;
  23. /*for(i=1;i<=k;i++)
  24. smin[i]=s[i];*/
  25. memcpy(smin,s,sizeof(s));
  26. }
  27. }
  28.  
  29. void back(int l, int c, int k)
  30. {
  31. int i;
  32. a[l][c]=-a[l][c];
  33. s[k].x=l;
  34. s[k].y=c;
  35. if(l==0 || c==0 || l==m+1 || c==n+1)
  36. {
  37. tipar(k);
  38. contor++;
  39. }
  40. else
  41. {
  42. if(a[l][c]/1000==0 && a[l-1][c]>=0)
  43. back(l-1,c,k+1);
  44. if(a[l][c]/100%10==0 && a[l][c+1]>=0)
  45. back(l,c+1,k+1);
  46. if(a[l][c]/10%10==0 && a[l+1][c]>=0)
  47. back(l+1,c,k+1);
  48. if(a[l][c]%10==0 && a[l][c-1]>=0)
  49. back(l,c-1,k+1);
  50. }
  51. a[l][c]=-a[l][c];
  52. }
  53.  
  54. int main()
  55. {
  56. f>>m>>n>>p>>q;
  57. for(i=1;i<=m;i++)
  58. for(j=1;j<=n;j++)
  59. f>>a[i][j];
  60. back(p,q,1);
  61. g<<"Sunt "<<contor<<" solutii"<<endl<<"Cea mai mica solutie are "<<kmin-1<<" pasi"<<endl;
  62. for(i=1;i<kmin;i++)
  63. g<<"("<<smin[i].x<<";"<<smin[i].y<<") ";
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement