无输出求助
查看原帖
无输出求助
945742
hexuchen楼主2025/1/25 15:26

rt,程序一直在把第一个方块左移右移左移右移,然而最后还正常结束了,没有爆栈?

#include <bits/stdc++.h>
using namespace std;
int n,s[8][6],s2[8][6],ans1[6],ans2[6],ans3[6];
void a_to_b(int (&a)[8][6],int (&b)[8][6]){
	for(int i=1;i<=7;i++){
		for(int j=1;j<=5;j++){
			b[i][j]=a[i][j];
		}
	}
}
void down(int x,int y){
	if(s[x][y]==0){
		return ;
	}
	for(int i=x;i<7;i++){
		if(s[i+1][y]==0){
			swap(s[i+1][y],s[i][y]);
		}
		else{
			break;
		}
	}
}
void move(int x,int y,int r,int c){
	swap(s[x][y],s[r][c]);
	down(r,c);
	for(int i=x-1;i>=1;i--){
		down(i,y);
	}
}
void proccess(){
	a_to_b(s,s2);
	for(int i=1;i<=7;i++){
		for(int j=1;j<=3;j++){
			if(s2[i][j]==s2[i][j+1] && s2[i][j+1]==s2[i][j+2]){
				s[i][j]=s[i][j+1]=s[i][j+2]=0;
			}
		}
	}
	for(int i=1;i<=5;i++){
		for(int j=1;j<=5;j++){
			if(s2[j+1][i]==s2[j+2][i] && s2[j+2][i]==s2[j+3][i]){
				s[j+1][i]=s[j+2][i]=s[j+3][i]=0;
			}
		}
	}
	for(int i=7;i>=1;i--){
		for(int j=1;j<=5;j++){
			down(i,j);
		}
	}
}
bool check(){
	for(int i=1;i<=7;i++){
		for(int j=1;j<=5;j++){
			if(s[i][j]!=0){
				return false;
			}
		}
	}
	return true;
}
void print2(){
	for(int i=1;i<=7;i++){
		for(int j=1;j<=5;j++){
			cout<<s[i][j];
		}
		cout<<'\n';
	}
	cout<<'\n';
}
void print(){
	for(int i=1;i<=n;i++){
		cout<<ans1[i]<<' '<<ans2[i]<<' '<<ans3[i]<<'\n';
	}
	exit(0);
}
void dfs(int step){
	//print2();
	if(check()){
		print();
		return ;
	}
	if(step>n){
		return ;
	}
	int s3[8][6];
	a_to_b(s,s3);
	for(int i=7;i>=1;i--){
		for(int j=1;j<=5;j++){
			if(s[i][j]==0){
				continue;
			}
			if(j<=4){
				ans1[step]=i;
				ans2[step]=j;
				ans3[step]=1;
				move(i,j,i,j+1);
				proccess();
				dfs(step+1);
				a_to_b(s3,s); 
			}
			if(j>=2 && s[i][j-1]==0){
				ans1[step]=i;
				ans2[step]=j;
				ans3[step]=-1;
				move(i,j,i,j-1);
				proccess();
				dfs(step+1);
				a_to_b(s3,s);
			}
		}
	}
}
int main(){
	cin>>n;
	for(int i=1;i<=5;i++){
		int a;
		for(int j=7;j>=1;j--){
			cin>>a;
			if(a==0){
				break;
			}
			s[j][i]=a;
		}
	}
	dfs(1);
	return 0;
}
/*
5
0
1 0
1 3 0
2 4 4 3 4 3 0
1 2 2 0
*/
2025/1/25 15:26
加载中...