60分WA on #2 #3求助!
查看原帖
60分WA on #2 #3求助!
658786
STUDENT00楼主2022/11/24 19:28

本来以为会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;
}

2022/11/24 19:28
加载中...