求助,80pts WA#3
查看原帖
求助,80pts WA#3
467443
A宋锦瑞A楼主2023/2/11 20:35
#include<bits/stdc++.h>

using namespace std;

struct cs {
	int x,y;
};

char c;
int m[5][5];
int deep,ans;
cs o1,o2;
int fx[4][2]= {0,1,1,0,-1,0,0,-1};
bool f;

bool win() {
	for(int i=1; i<=4; i++) {
		if(m[i][1]==m[i][2]&&m[i][2]==m[i][3]&&m[i][3]==m[i][4]) {
			return 1;
		}
		if(m[1][i]==m[2][i]&&m[2][i]==m[3][i]&&m[3][i]==m[4][i]) {
			return 1;
		}
	}
	if(m[1][1]==m[2][2]&&m[2][2]==m[3][3]&&m[3][3]==m[4][4]) {
		return 1;
	}
	if(m[1][4]==m[2][3]&&m[2][3]==m[3][2]&&m[3][2]==m[4][1]) {
		return 1;
	}
	return 0;
}

bool check(cs x,int bow) {
	return (m[x.x][x.y]!=bow&&x.x>=1&&x.x<=4&&x.y>=1&&x.y<=4);
}

void iddfs(cs a,cs b,int bow,int d) {
	cs x,y;
	if(win()) {
		f=1;
		return;
	} else if(d>deep) {
		return;
	}
	for(int i=0; i<4; i++) {
		x.x=a.x+fx[i][0];
		x.y=a.y+fx[i][1];
		y.x=b.x+fx[i][0];
		y.y=b.y+fx[i][1];
		if(check(x,bow)) {
			swap(m[a.x][a.y],m[x.x][x.y]);
			iddfs(x,b,m[a.x][a.y],d+1);
			swap(m[a.x][a.y],m[x.x][x.y]);
		}
		if(check(y,bow)) {
			swap(m[b.x][b.y],m[y.x][y.y]);
			iddfs(a,y,m[b.x][b.y],d+1);
			swap(m[b.x][b.y],m[y.x][y.y]);
		}
	}
}

int main() {
	for(int i=1; i<=4; i++) {
		for(int j=1; j<=4; j++) {
			cin>>c;
			if(c=='B') {
				m[i][j]=1;
			} else if(c=='W') {
				m[i][j]=2;
			} else {
				m[i][j]=3;
				if(o1.x==0) {
					o1.x=i;
					o1.y=j;
				} else {
					o2.x=i;
					o2.y=j;
				}
			}
		}
	}
	for(deep=0;; deep++) {
		iddfs(o1,o2,1,1);
		iddfs(o1,o2,2,1);
		if(f) {
			cout<<deep;
			break;
		}
	}

	return 0;
}
2023/2/11 20:35
加载中...