nicuvlad76

Untitled

Nov 21st, 2020
859
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.50 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define N 35
  3. using namespace std;
  4. ifstream fin("card.in");
  5. ofstream fout("card.out");
  6.  
  7. int a[N][N];
  8. int n, m,X, Y,K;
  9. int dl[]={-1,-1,-1,0,0,1,1,1};
  10. int dc[]={-1,0,1,-1,1,-1,0,1};
  11. int viz[N][N], x[N],sol[N],lmin=8;
  12. int nrsol;
  13. void Citire()
  14. {
  15.     fin>>n>>m>>X>>Y>>K;
  16.     for(int i=1;i<=n;i++)
  17.         for(int j=1;j<=m;j++)
  18.         fin>>a[i][j];
  19.  
  20. }
  21. void SolFin(int k)
  22. {
  23.     if(k<lmin){lmin=k; nrsol=1;
  24.     for(int i=1;i<=k;i++)sol[i]=x[i];
  25.     }
  26.     else  if(k==lmin)
  27.     {
  28.         nrsol++;
  29.         if(x[k]<sol[k])
  30.             for(int i=1;i<=k;i++)sol[i]=x[i];
  31.         else
  32.             if(x[k]==sol[k]&& x[1]<sol[1])
  33.               for(int i=1;i<=k;i++)sol[i]=x[i];
  34.     }
  35. }
  36. void Back(int k, int l, int c, int Puncte)
  37. {
  38.     int lv, cv;
  39.     for(int i=0;i<8;i++)
  40.     if(viz[l+dl[i]][c+dc[i]]==0 &&a[l+dl[i]][c+dc[i]]!=0)
  41.     {
  42.       lv=l+dl[i]; cv=c+dc[i];
  43.         x[k]=a[lv][cv];
  44.         viz[lv][cv]=1;
  45.         if(Puncte-2*x[k]==0) SolFin(k);
  46.         else  if(k<K)Back(k+1,lv,cv,Puncte-2*x[k]);
  47.  
  48.         if(Puncte-x[k]/2==0) SolFin(k);
  49.         else  if(k<K)Back(k+1,lv,cv,Puncte-x[k]/2);
  50.  
  51.         if(Puncte+x[k]==0) SolFin(k);
  52.         else  if(k<K)Back(k+1,lv,cv,Puncte+x[k]);
  53.  
  54.         if(Puncte-x[k]==0) SolFin(k);
  55.         else  if(k<K)Back(k+1,lv,cv,Puncte-x[k]);
  56.  
  57.         viz[lv][cv]=0;
  58.     }
  59. }
  60. int main()
  61. {
  62.     Citire();
  63.     viz[X][Y]=1;
  64.     Back(1,X,Y,a[X][Y]);
  65.     fout<<nrsol<<'\n';
  66.     for(int i=1;i<=lmin;i++)fout<<sol[i]<<' ';
  67.     return 0;
  68. }
  69.  
Advertisement
Add Comment
Please, Sign In to add comment