本来以为会TLE的,没想到WA了???
十分野蛮的代码:
#include<bits/stdc++.h>
#define vec vector<vector<char> >
using namespace std;
vec start;
set<vec> vis;
queue<pair<vec,int> > q;
int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
bool check(vec t){
return (t[0][0]==t[0][1]&&t[0][1]==t[0][2]&&t[0][2]==t[0][3]||
t[1][0]==t[1][1]&&t[1][1]==t[1][2]&&t[1][2]==t[1][3]||
t[2][0]==t[2][1]&&t[2][1]==t[2][2]&&t[2][2]==t[2][3]||
t[3][0]==t[3][1]&&t[3][1]==t[3][2]&&t[3][2]==t[3][3]||
t[0][0]==t[1][0]&&t[1][0]==t[2][0]&&t[2][0]==t[3][0]||
t[0][1]==t[1][1]&&t[1][1]==t[2][1]&&t[2][1]==t[3][1]||
t[0][2]==t[1][2]&&t[1][2]==t[2][2]&&t[2][2]==t[3][2]||
t[0][3]==t[1][3]&&t[1][3]==t[2][3]&&t[2][3]==t[3][3]||
t[0][0]==t[1][1]&&t[1][1]==t[2][2]&&t[2][2]==t[3][3]||
t[0][3]==t[1][2]&&t[1][2]==t[2][1]&&t[2][1]==t[3][0]);
}
int main(){
for(int i=0;i<4;i++){
vector<char> t;
char c[4];
scanf("%s",c);
for(int i=0;i<4;i++) t.push_back((c[i]=='B'?1:(c[i]=='W'?0:2)));
start.push_back(t);
}
vis.insert(start);
q.push(make_pair(start,0));
while(!q.empty()){
vec p=q.front().first;
int s=q.front().second;
q.pop();
if(check(p)){
printf("%d",s);
return 0;
}
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(p[i][j]==2){
for(int k=0;k<4;k++){
int x=i+dx[k],y=j+dy[k];
if(x>=0&&x<4&&y>=0&&y<4&&p[x][y]!=2){
swap(p[i][j],p[x][y]);
if(!vis.count(p)){
vis.insert(p);
q.push(make_pair(p,s+1));
}
swap(p[i][j],p[x][y]);
}
}
}
}
}
}
return 0;
}