|
终于用bfs过了!!!
- #include<iostream>
- #include<cmath>
- using namespace std;
- const int mx=5;
- const int mm=10001;///a当前
- int a[mx][mx][mm],n[mm],x[mm],y[mm];///n步数
- int i,j,k,head,tail;
- bool cmp(int t)
- {
- for (int ii=1; ii<=3; ii++)
- for (int jj=1; jj<=3; jj++)
- if (a[ii][jj][t]==0) return false;
- return true;
- }
- void change(int tx,int ty,int t)
- {
- a[tx-1][ty][t]=1-a[tx-1][ty][t];
- a[tx+1][ty][t]=1-a[tx+1][ty][t];
- a[tx][ty-1][t]=1-a[tx][ty-1][t];
- a[tx][ty+1][t]=1-a[tx][ty+1][t];
- a[tx][ty][t]=1-a[tx][ty][t];
- }
- int main()
- {
- for (i=1; i<=3; i++)
- for (j=1; j<=3; j++) cin>>a[i][j][1];
- head=1,tail=2,x[1]=1,y[1]=1;
- while (head<=tail)
- {
- if (cmp(head))
- {
- cout<<n[head];
- return 0;
- }
- int nx=x[head];
- int ny=y[head];
- change(nx,ny,head);
- for (i=1; i<=3; i++)
- for (j=1; j<=3; j++)
- a[i][j][tail]=a[i][j][head];
- n[tail]=n[head]+1;
- if (x[head]==3)
- x[tail]=1,y[tail]=y[head]+1;
- else x[tail]=x[head]+1,y[tail]=y[head];
- tail++;
- change(nx,ny,head);
- for (i=1; i<=3; i++)
- for (j=1; j<=3; j++)
- a[i][j][tail]=a[i][j][head];
- n[tail]=n[head];
- if (x[head]==3)
- x[tail]=1,y[tail]=y[head]+1;
- else x[tail]=x[head]+1,y[tail]=y[head];
- tail++;
- head++;
- }
- return 0;
- }
复制代码 |
|