Advertisement
a53

cub1

a53
May 21st, 2019
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.93 KB | None | 0 0
  1. #include <fstream>
  2. #include <queue>
  3. using namespace std;
  4. ifstream fin ("cub1.in");
  5. ofstream fout ("cub1.out");
  6. queue <int> i,j,k;
  7. int a[101][101][101],b[101][101][101],l[70][20],n,p,maxi,ii,jj,kk;
  8. const int dri[7]={9,0,0,1,0,-1,0};
  9. const int drj[7]={9,0,0,0,1,0,-1};
  10. const int drk[7]={9,1,-1,0,0,0,0};
  11.  
  12. int inside(int i,int j,int k)
  13. {
  14. return i<=n&&i>=1&&j<=n&&j>=1&&k<=n&&k >=1;
  15. }
  16.  
  17. void lee ()
  18. {
  19. b[1][1][1]=1;
  20. i.push(1);
  21. j.push(1);
  22. k.push(1);
  23.  
  24. while(i.size())
  25. {
  26. int ia=i.front();
  27. int ja=j.front();
  28. int ka=k.front();
  29. i.pop();
  30. j.pop();
  31. k.pop();
  32. for(int q=1;q<=6;q++)
  33. {
  34. int di=0,dj=0,dk=0;
  35. if(q==1&&l[a[ka][ia][ja]][q]%2==1&&inside(ka+1,ia,ja)) dk=1;
  36. if(q==2&&l[a[ka][ia][ja]][q]%2==1&&inside(ka-1,ia,ja)) dk=-1;
  37. if(q==3&&l[a[ka][ia][ja]][q]%2==1&&inside(ka,ia+1,ja)) di=1;
  38. if(q==4&&l[a[ka][ia][ja]][q]%2==1&&inside(ka,ia,ja+1)) dj=1;
  39. if(q==5&&l[a[ka][ia][ja]][q]%2==1&&inside(ka,ia-1,ja)) di=-1;
  40. if(q==6&&l[a[ka][ia][ja]][q]%2==1&&inside(ka,ia,ja-1))dj=-1;
  41. int in=ia+di;
  42. int jn=ja+dj;
  43. int kn=ka+dk;
  44. if(b[kn][in][jn]==0)
  45. {
  46. b[kn][in][jn]=b[ka][ia][ja]+1;
  47. i.push(in);
  48. j.push(jn);
  49. k.push(kn);
  50. if(in==n&&jn==n&&kn==n)
  51. return;
  52. }
  53. }
  54. }
  55.  
  56. }
  57.  
  58. void rec(int k,int i,int j)
  59. {
  60. bool u=0;
  61. int invers;
  62. if(k!=1||i!=1||j!=1)
  63. for(int q=1;q<=6;q++)
  64. {
  65. if(q==1) invers=2;
  66. if(q==2) invers=1;
  67. if(q==3) invers=5;
  68. if(q==4) invers=6;
  69. if(q==5) invers=3;
  70. if(q==6) invers=4;
  71. if(l[a[k+drk[q]][i+dri[q]][j+drj[q]]][invers]==1)
  72. if(b[k+drk[q]][i+dri[q]][j+drj[q]]==b[k][i][j]-1&&u==0) {u =1;rec(k+drk[q],i+dri[q],j+drj[q]);}
  73. }
  74. else return;
  75. fout<<k<<' '<<i<<' '<<j<<'\n';
  76. }
  77.  
  78. int main()
  79. {
  80. fin>>p;
  81. fin>>n;
  82. for(int k=1;k<=n;k++)
  83. for(int i=1;i<=n;i++)
  84. for(int j=1;j<=n;j++)
  85. {
  86. fin>>a[k][i][j];
  87. int nr1=0,aux=a[k][i][j];
  88. for(int q=1;q<=6;q++)
  89. {
  90. l[a[k][i][j]][q]=aux%2;
  91. if(q==1&&aux%2==1&&inside(k+1,i,j)) nr1++;
  92. if(q==2&&aux%2==1&&inside(k-1,i,j))nr1++;
  93. if(q==3&&aux%2==1&&inside(k,i+1,j))nr1++;
  94. if(q==4&&aux%2==1&&inside(k,i,j+1)) nr1++;
  95. if(q==5&&aux%2==1&&inside(k,i-1,j)) nr1++;
  96. if(q==6&&aux%2==1&&inside(k,i,j-1)) nr1++;
  97. aux=aux/2;
  98. }
  99. if(nr1>maxi){maxi=nr1;ii=i;jj=j;kk=k;}
  100. }
  101. if(p==1) fout<<kk<<' '<<ii<<' '<<jj;
  102. if(p==2)
  103. {
  104. lee();
  105. if (b[n][n][n])
  106. {
  107. fout<<b[n][n][n]<<'\n'<<1<<' '<<1<<' '<<1<<'\n';
  108. rec(n,n,n);
  109. }
  110. else fout<<-1;
  111. }
  112. return 0;
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement