Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <queue>
- using namespace std;
- ifstream fin ("cub1.in");
- ofstream fout ("cub1.out");
- queue <int> i,j,k;
- int a[101][101][101],b[101][101][101],l[70][20],n,p,maxi,ii,jj,kk;
- const int dri[7]={9,0,0,1,0,-1,0};
- const int drj[7]={9,0,0,0,1,0,-1};
- const int drk[7]={9,1,-1,0,0,0,0};
- int inside(int i,int j,int k)
- {
- return i<=n&&i>=1&&j<=n&&j>=1&&k<=n&&k >=1;
- }
- void lee ()
- {
- b[1][1][1]=1;
- i.push(1);
- j.push(1);
- k.push(1);
- while(i.size())
- {
- int ia=i.front();
- int ja=j.front();
- int ka=k.front();
- i.pop();
- j.pop();
- k.pop();
- for(int q=1;q<=6;q++)
- {
- int di=0,dj=0,dk=0;
- if(q==1&&l[a[ka][ia][ja]][q]%2==1&&inside(ka+1,ia,ja)) dk=1;
- if(q==2&&l[a[ka][ia][ja]][q]%2==1&&inside(ka-1,ia,ja)) dk=-1;
- if(q==3&&l[a[ka][ia][ja]][q]%2==1&&inside(ka,ia+1,ja)) di=1;
- if(q==4&&l[a[ka][ia][ja]][q]%2==1&&inside(ka,ia,ja+1)) dj=1;
- if(q==5&&l[a[ka][ia][ja]][q]%2==1&&inside(ka,ia-1,ja)) di=-1;
- if(q==6&&l[a[ka][ia][ja]][q]%2==1&&inside(ka,ia,ja-1))dj=-1;
- int in=ia+di;
- int jn=ja+dj;
- int kn=ka+dk;
- if(b[kn][in][jn]==0)
- {
- b[kn][in][jn]=b[ka][ia][ja]+1;
- i.push(in);
- j.push(jn);
- k.push(kn);
- if(in==n&&jn==n&&kn==n)
- return;
- }
- }
- }
- }
- void rec(int k,int i,int j)
- {
- bool u=0;
- int invers;
- if(k!=1||i!=1||j!=1)
- for(int q=1;q<=6;q++)
- {
- if(q==1) invers=2;
- if(q==2) invers=1;
- if(q==3) invers=5;
- if(q==4) invers=6;
- if(q==5) invers=3;
- if(q==6) invers=4;
- if(l[a[k+drk[q]][i+dri[q]][j+drj[q]]][invers]==1)
- 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]);}
- }
- else return;
- fout<<k<<' '<<i<<' '<<j<<'\n';
- }
- int main()
- {
- fin>>p;
- fin>>n;
- for(int k=1;k<=n;k++)
- for(int i=1;i<=n;i++)
- for(int j=1;j<=n;j++)
- {
- fin>>a[k][i][j];
- int nr1=0,aux=a[k][i][j];
- for(int q=1;q<=6;q++)
- {
- l[a[k][i][j]][q]=aux%2;
- if(q==1&&aux%2==1&&inside(k+1,i,j)) nr1++;
- if(q==2&&aux%2==1&&inside(k-1,i,j))nr1++;
- if(q==3&&aux%2==1&&inside(k,i+1,j))nr1++;
- if(q==4&&aux%2==1&&inside(k,i,j+1)) nr1++;
- if(q==5&&aux%2==1&&inside(k,i-1,j)) nr1++;
- if(q==6&&aux%2==1&&inside(k,i,j-1)) nr1++;
- aux=aux/2;
- }
- if(nr1>maxi){maxi=nr1;ii=i;jj=j;kk=k;}
- }
- if(p==1) fout<<kk<<' '<<ii<<' '<<jj;
- if(p==2)
- {
- lee();
- if (b[n][n][n])
- {
- fout<<b[n][n][n]<<'\n'<<1<<' '<<1<<' '<<1<<'\n';
- rec(n,n,n);
- }
- else fout<<-1;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement