悬赏关注QWQ 谢谢
by 137QWQ @ 2022-08-03 17:23:09
@[137QWQ](/user/167875)
### 这是我的代码,可以参考一下:
```
#include<bits/stdc++.h>
using namespace std;
int n,a[8][6],flag,F,d,da[40],db[40],dc[40],ans[8][3],S[12],T;
void cheak() {
d = false;
bool f[8][6];
memset(f,false,sizeof(f));
for (int i = 1; i <= 5; i++)
for (int j = 1; j <= 7; j++)
if (a[j][i]) {
if (i <= 3 && a[j][i] == a[j][i + 1] && a[j][i+1] == a[j][i + 2])
f[j][i] = f[j][i + 1] = f[j][i + 2] = true;
if (j <= 5 && a[j][i] == a[j + 1][i] && a[j+1][i] == a[j + 2][i])
f[j][i] = f[j + 1][i] = f[j + 2][i] = true;
}
for (int i = 1; i <= 5; i++)
for (int j = 1; j <= 7; j++)
if (f[j][i]) {
a[j][i] = 0;
--a[0][i];
d = true;
}
}
void CD() {
cheak();
while(d) {
for (int i = 1; i <= 5; i++) {
int s = 0;
for (int j = 1; j <= 7; j++) {
int t = a[j][i];
a[j][i] = 0;
if(t) ++s,a[s][i] = t;
}
}
cheak();
}
}
bool jz() {
for(int i = 1; i <= T; i++) S[i]=0;
for(int i = 1; i <= 5; i++)
for(int j = 1; j <= a[0][i]; j++)
S[a[j][i]]++;
for(int i = 1; i <= T; i++)
if(S[i]==1|S[i]==2)
return 1;
return 0;
}
void dfs(int x) {
if(flag) return;
if(x==n) {
F=0;
for(int i = 1; i <= 5; i++) {
if(a[0][i]!=0) {
F=1;
break;
}
}
if(!F) {
for(int i = 1; i <= n; i++) {
printf("%d %d %d\n",ans[i][0],ans[i][1],ans[i][2]);
}
flag=1;
}
return;
}
if(jz()) return;
int save[8][6];
for(int i = 1; i <= 5; i++) {
save[0][i]=a[0][i];
for(int j = 1; j <= a[0][i]; j++)
save[j][i]=a[j][i];
}
for(int i = 1; i <= 5; i++) {
for(int j = 1; j <= a[0][i]; j++) {
if(i!=5) {
if(a[j][i+1]) swap(a[j][i+1],a[j][i]);
else {
++a[0][i+1],a[a[0][i+1]][i+1]=a[j][i];
for(int k = j+1; k <= a[0][i]; k++)
a[k-1][i]=a[k][i];
a[a[0][i]][i]=0,--a[0][i];
}
CD();
ans[x+1][0]=i-1,ans[x+1][1]=j-1,ans[x+1][2]=1;
dfs(x+1);
for(int i = 1; i <= 5; i++) {
a[0][i]=save[0][i];
for(int j = 1; j <= save[0][i]; j++) {
a[j][i]=save[j][i];
}
for(int j = save[0][i]+1; j <= 7; j++) {
a[j][i]=0;
}
}
}
if(i!=1&&a[j][i-1]==0) {
++a[0][i-1],a[a[0][i-1]][i-1]=a[j][i];
for(int k = j+1; k <= a[0][i]; k++)
a[k-1][i]=a[k][i];
a[a[0][i]][i]=0,--a[0][i];
CD();
ans[x+1][0]=i-1,ans[x+1][1]=j-1,ans[x+1][2]=-1;
dfs(x+1);
for(int i = 1; i <= 5; i++) {
a[0][i]=save[0][i];
for(int j = 1; j <= save[0][i]; j++) {
a[j][i]=save[j][i];
}
for(int j = save[0][i]+1; j <= 7; j++) {
a[j][i]=0;
}
}
}
}
}
}
int main() {
scanf("%d",&n);
for(int i = 1; i <= 5; i++) {
for(int j = 1; j <= 8; j++) {
scanf("%d",&a[j][i]);
T=max(T,a[j][i]);
if(a[j][i]==0) {
a[0][i]=j-1;
break;
}
}
}
dfs(0);
if(!flag) printf("-1");
return 0;
}
```
by 2012GFKKKZ @ 2023-08-11 12:50:15
@[fendigao](/user/1037866)
qwq 太强了
by 137QWQ @ 2023-08-12 14:26:30