样例
查看原帖
样例
663195
Z_AuTwT楼主2024/2/24 00:01
A
AA
AAA
AAAA
AAAAA
GAGAAC
GGGCCCA
EEEHHAAA
EAHHHCAAF
EAACCCFFFF

我的代码输出这个,手推了几遍觉得这个没有问题。 代码:

#include<bits/stdc++.h>
using namespace std;
bool book[11][11];
char mat[11][11];
int nxt1[4][3][2]={{0,0,1,0,1,-1},{0,0,1,0,1,1},{0,0,0,1,1,1},{0,0,0,1,1,0}};
int nxt2[2][4][2]={{0,0,0,1,0,2,0,3},{0,0,1,0,2,0,3,0}};
int nxt3[8][4][2]={{0,0,1,0,2,0,2,1},{0,0,1,0,2,0,2,-1},{0,0,0,1,1,1,2,1},{0,0,1,0,2,0,0,1},{0,0,0,1,0,2,1,0},{0,0,0,1,0,2,1,2},{0,0,1,0,1,1,1,2},{0,0,1,0,1,-1,1,-2}};
int nxt4[1][4][2]={{0,0,0,1,1,0,1,1}};
int nxt5[4][5][2]={{0,0,1,0,2,0,2,1,2,2},{0,0,1,0,2,0,2,-1,2,-2},{0,0,0,1,0,2,1,2,2,2},{0,0,1,0,2,0,0,1,0,2}};
int nxt6[8][5][2]={{0,0,1,0,1,1,2,0,3,0},{0,0,1,0,2,0,3,0,2,-1},{0,0,0,1,0,2,0,3,1,2},{0,0,0,1,-1,1,0,2,0,3},{0,0,0,1,1,1,0,2,0,3},{0,0,1,0,2,0,2,1,3,0},{0,0,0,1,0,2,-1,2,0,3},{0,0,0,1,-1,1,1,1,2,1}};
int nxt7[4][5][2]={{0,0,1,0,0,1,0,2,1,2},{0,0,0,1,1,0,2,0,2,1},{0,0,1,0,1,1,1,2,0,2},{0,0,0,1,1,1,2,1,2,0}};
int nxt8[8][5][2]={{0,0,1,0,0,1,1,1,-1,1},{0,0,0,1,1,0,1,1,2,0},{0,0,0,1,0,2,1,1,1,2},{0,0,1,0,0,1,1,1,1,2},{0,0,0,1,0,2,1,0,1,1},{0,0,0,1,1,0,1,1,2,1},{0,0,1,0,1,-1,1,1,0,1},{0,0,1,0,1,1,2,0,2,1}};
int nxt9[8][5][2]={{0,0,1,0,2,0,2,1,3,1},{0,0,1,0,1,1,2,1,3,1},{0,0,0,1,0,2,-1,2,-1,3},{0,0,1,0,1,-1,0,1,0,2},{0,0,0,1,0,2,1,2,1,3},{0,0,1,0,2,0,2,-1,3,-1},{0,0,0,1,1,1,1,2,1,3},{0,0,1,0,2,0,0,1,-1,1}};
int nxt10[1][5][2]={{0,0,-1,0,0,-1,1,0,0,1}};
int nxt11[4][5][2]={{0,0,1,0,1,1,2,1,2,2},{0,0,0,1,1,0,1,-1,2,-1},{0,0,1,0,1,-1,2,-1,2,-2},{0,0,0,1,1,1,1,2,2,2}};
int nxt12[8][5][2]={{0,0,1,0,2,0,3,0,3,-1},{0,0,1,0,2,0,3,0,0,1},{0,0,0,1,0,2,0,3,1,3},{0,0,1,0,1,1,1,2,1,3},{0,0,0,1,0,2,0,3,1,0},{0,0,0,1,1,1,2,1,3,1},{0,0,0,1,0,2,0,3,-1,3},{0,0,1,0,2,0,3,0,3,1}};
void dfs(){
//	for(int i=1;i<=10;i++){
//		for(int j=1;j<=i;j++){
//			cout<<mat[i][j];
//		}
//		cout<<"\n";
//	}
//	cout<<"\n";
//	_sleep(1000);
	if((double)clock()/CLOCKS_PER_SEC>0.9){
		cout<<"No solution";
		exit(0);
	}
	bool c=false;
	for(int i=1;i<=10;i++){
		for(int j=1;j<=i;j++){
			if(mat[i][j]=='.'){
				c=true;
				bool flag=false;
				/*A*/
				for(int i1=0;i1<4;i1++){
					bool flag1=true;
					for(int j1=0;j1<3;j1++){
						int nx=i+nxt1[i1][j1][0],ny=j+nxt1[i1][j1][1];
						if(nx<1||nx>10||ny<1||ny>10||book[nx][ny]==false||mat[nx][ny]!='.'){
							flag1=false;
							break;
						}
					}
					if(flag1==true){
						flag=true;
						for(int j1=0;j1<3;j1++){
							int nx=i+nxt1[i1][j1][0],ny=j+nxt1[i1][j1][1];
							mat[nx][ny]='A';
						}
						dfs();
						for(int j1=0;j1<3;j1++){
							int nx=i+nxt1[i1][j1][0],ny=j+nxt1[i1][j1][1];
							mat[nx][ny]='.';
						}
					}
				}
				/*B*/
				for(int i1=0;i1<2;i1++){
					bool flag1=true;
					for(int j1=0;j1<4;j1++){
						int nx=i+nxt2[i1][j1][0],ny=j+nxt2[i1][j1][1];
						if(nx<1||nx>10||ny<1||ny>10||book[nx][ny]==false||mat[nx][ny]!='.'){
							flag1=false;
							break;
						}
					}
					if(flag1==true){
						flag=true;
						for(int j1=0;j1<4;j1++){
							int nx=i+nxt2[i1][j1][0],ny=j+nxt2[i1][j1][1];
							mat[nx][ny]='B';
						}
						dfs();
						for(int j1=0;j1<4;j1++){
							int nx=i+nxt2[i1][j1][0],ny=j+nxt2[i1][j1][1];
							mat[nx][ny]='.';
						}
					}
				}
				/*C*/
				for(int i1=0;i1<8;i1++){
					bool flag1=true;
					for(int j1=0;j1<4;j1++){
						int nx=i+nxt3[i1][j1][0],ny=j+nxt3[i1][j1][1];
						if(nx<1||nx>10||ny<1||ny>10||book[nx][ny]==false||mat[nx][ny]!='.'){
							flag1=false;
							break;
						}
					}
					if(flag1==true){
						flag=true;
						for(int j1=0;j1<4;j1++){
							int nx=i+nxt3[i1][j1][0],ny=j+nxt3[i1][j1][1];
							mat[nx][ny]='C';
						}
						dfs();
						for(int j1=0;j1<4;j1++){
							int nx=i+nxt3[i1][j1][0],ny=j+nxt3[i1][j1][1];
							mat[nx][ny]='.';
						}
					}
				}
				/*D*/
				for(int i1=0;i1<1;i1++){
					bool flag1=true;
					for(int j1=0;j1<4;j1++){
						int nx=i+nxt4[i1][j1][0],ny=j+nxt4[i1][j1][1];
						if(nx<1||nx>10||ny<1||ny>10||book[nx][ny]==false||mat[nx][ny]!='.'){
							flag1=false;
							break;
						}
					}
					if(flag1==true){
						flag=true;
						for(int j1=0;j1<4;j1++){
							int nx=i+nxt4[i1][j1][0],ny=j+nxt4[i1][j1][1];
							mat[nx][ny]='D';
						}
						dfs();
						for(int j1=0;j1<4;j1++){
							int nx=i+nxt4[i1][j1][0],ny=j+nxt4[i1][j1][1];
							mat[nx][ny]='.';
						}
					}
				}
				/*E*/
				for(int i1=0;i1<4;i1++){
					bool flag1=true;
					for(int j1=0;j1<5;j1++){
						int nx=i+nxt5[i1][j1][0],ny=j+nxt5[i1][j1][1];
						if(nx<1||nx>10||ny<1||ny>10||book[nx][ny]==false||mat[nx][ny]!='.'){
							flag1=false;
							break;
						}
					}
					if(flag1==true){
						flag=true;
						for(int j1=0;j1<5;j1++){
							int nx=i+nxt5[i1][j1][0],ny=j+nxt5[i1][j1][1];
							mat[nx][ny]='E';
						}
						dfs();
						for(int j1=0;j1<5;j1++){
							int nx=i+nxt5[i1][j1][0],ny=j+nxt5[i1][j1][1];
							mat[nx][ny]='.';
						}
					}
				}
				/*F*/
				for(int i1=0;i1<8;i1++){
					bool flag1=true;
					for(int j1=0;j1<5;j1++){
						int nx=i+nxt6[i1][j1][0],ny=j+nxt6[i1][j1][1];
						if(nx<1||nx>10||ny<1||ny>10||book[nx][ny]==false||mat[nx][ny]!='.'){
							flag1=false;
							break;
						}
					}
					if(flag1==true){
						flag=true;
						for(int j1=0;j1<5;j1++){
							int nx=i+nxt6[i1][j1][0],ny=j+nxt6[i1][j1][1];
							mat[nx][ny]='F';
						}
						dfs();
						for(int j1=0;j1<5;j1++){
							int nx=i+nxt6[i1][j1][0],ny=j+nxt6[i1][j1][1];
							mat[nx][ny]='.';
						}
					}
				}
				/*G*/
				for(int i1=0;i1<4;i1++){
					bool flag1=true;
					for(int j1=0;j1<5;j1++){
						int nx=i+nxt7[i1][j1][0],ny=j+nxt7[i1][j1][1];
						if(nx<1||nx>10||ny<1||ny>10||book[nx][ny]==false||mat[nx][ny]!='.'){
							flag1=false;
							break;
						}
					}
					if(flag1==true){
						flag=true;
						for(int j1=0;j1<5;j1++){
							int nx=i+nxt7[i1][j1][0],ny=j+nxt7[i1][j1][1];
							mat[nx][ny]='G';
						}
						dfs();
						for(int j1=0;j1<5;j1++){
							int nx=i+nxt7[i1][j1][0],ny=j+nxt7[i1][j1][1];
							mat[nx][ny]='.';
						}
					}
				}
				/*H*/
				for(int i1=0;i1<8;i1++){
					bool flag1=true;
					for(int j1=0;j1<5;j1++){
						int nx=i+nxt8[i1][j1][0],ny=j+nxt8[i1][j1][1];
						if(nx<1||nx>10||ny<1||ny>10||book[nx][ny]==false||mat[nx][ny]!='.'){
							flag1=false;
							break;
						}
					}
					if(flag1==true){
						flag=true;
						for(int j1=0;j1<5;j1++){
							int nx=i+nxt8[i1][j1][0],ny=j+nxt8[i1][j1][1];
							mat[nx][ny]='H';
						}
						dfs();
						for(int j1=0;j1<5;j1++){
							int nx=i+nxt8[i1][j1][0],ny=j+nxt8[i1][j1][1];
							mat[nx][ny]='.';
						}
					}
				}
				/*I*/
				for(int i1=0;i1<8;i1++){
					bool flag1=true;
					for(int j1=0;j1<5;j1++){
						int nx=i+nxt9[i1][j1][0],ny=j+nxt9[i1][j1][1];
						if(nx<1||nx>10||ny<1||ny>10||book[nx][ny]==false||mat[nx][ny]!='.'){
							flag1=false;
							break;
						}
					}
					if(flag1==true){
						flag=true;
						for(int j1=0;j1<5;j1++){
							int nx=i+nxt9[i1][j1][0],ny=j+nxt9[i1][j1][1];
							mat[nx][ny]='i1';
						}
						dfs();
						for(int j1=0;j1<5;j1++){
							int nx=i+nxt9[i1][j1][0],ny=j+nxt9[i1][j1][1];
							mat[nx][ny]='.';
						}
					}
				}
				/*J*/
				for(int i1=0;i1<1;i1++){
					bool flag1=true;
					for(int j1=0;j1<5;j1++){
						int nx=i+nxt10[i1][j1][0],ny=j+nxt10[i1][j1][1];
						if(nx<1||nx>10||ny<1||ny>10||book[nx][ny]==false||mat[nx][ny]!='.'){
							flag1=false;
							break;
						}
					}
					if(flag1==true){
						flag=true;
						for(int j1=0;j1<5;j1++){
							int nx=i+nxt10[i1][j1][0],ny=j+nxt10[i1][j1][1];
							mat[nx][ny]='J';
						}
						dfs();
						for(int j1=0;j1<5;j1++){
							int nx=i+nxt10[i1][j1][0],ny=j+nxt10[i1][j1][1];
							mat[nx][ny]='.';
						}
					}
				}
				/*K*/
				for(int i1=0;i1<4;i1++){
					bool flag1=true;
					for(int j1=0;j1<5;j1++){
						int nx=i+nxt11[i1][j1][0],ny=j+nxt11[i1][j1][1];
						if(nx<1||nx>10||ny<1||ny>10||book[nx][ny]==false||mat[nx][ny]!='.'){
							flag1=false;
							break;
						}
					}
					if(flag1==true){
						flag=true;
						for(int j1=0;j1<5;j1++){
							int nx=i+nxt11[i1][j1][0],ny=j+nxt11[i1][j1][1];
							mat[nx][ny]='K';
						}
						dfs();
						for(int j1=0;j1<5;j1++){
							int nx=i+nxt11[i1][j1][0],ny=j+nxt11[i1][j1][1];
							mat[nx][ny]='.';
						}
					}
				}
				/*L*/
				for(int i1=0;i1<8;i1++){
					bool flag1=true;
					for(int j1=0;j1<5;j1++){
						int nx=i+nxt12[i1][j1][0],ny=j+nxt12[i1][j1][1];
						if(nx<1||nx>10||ny<1||ny>10||book[nx][ny]==false||mat[nx][ny]!='.'){
							flag1=false;
							break;
						}
					}
					if(flag1==true){
						flag=true;
						for(int j1=0;j1<5;j1++){
							int nx=i+nxt12[i1][j1][0],ny=j+nxt12[i1][j1][1];
							mat[nx][ny]='L';
						}
						dfs();
						for(int j1=0;j1<5;j1++){
							int nx=i+nxt12[i1][j1][0],ny=j+nxt12[i1][j1][1];
							mat[nx][ny]='.';
						}
					}
				}
				if(flag==false){
					return;
				}
			}
		}
	}
 	if(c==false){
		for(int i=1;i<=10;i++){
			for(int j=1;j<=i;j++){
				cout<<mat[i][j];
			}
			cout<<"\n";
		}
 		exit(0);
 	}
	return;
}
int main(){
	for(int i=1;i<=10;i++){
		for(int j=1;j<=i;j++){
			cin>>mat[i][j];
			book[i][j]=true;
		}
	}
	dfs();
	cout<<"No solution";
}
2024/2/24 00:01
加载中...