不知道为什么WA了,求大佬指点
查看原帖
不知道为什么WA了,求大佬指点
608251
zfznbnb楼主2023/1/12 20:29

感觉没什么问题,但是不知道为什么WA了,一直死循环,求大佬指点。

代码如下:

#include<bits/stdc++.h>
using namespace std;
const int maxn=0x7fffffff;
int move[10][10]={
	{0,0,0,0,0,0,0,0,0,0},
	{0,1,1,0,1,1,0,0,0,0},
	{0,1,1,1,0,0,0,0,0,0},
	{0,0,1,1,0,1,1,0,0,0},
	{0,1,0,0,1,0,0,1,0,0},
	{0,0,1,0,1,1,1,0,1,0},
	{0,0,0,1,0,0,1,0,0,1},
	{0,0,0,0,1,1,0,1,1,0},
	{0,0,0,0,0,0,0,1,1,1},
	{0,0,0,0,0,1,1,0,1,1},
};//九种操作的改变状态(第一行和第一列忽略
int gre=27//最优操作次数;
int a[10];
int f[28],ope[28]//存放最优操作序列的数组,used[10]//这个操作进行过几次(同一种操作不能多于3次);
void search(int x,int p){
	int po=0;
	for(int i=1;i<=9;i++){
		po+=a[i];
	}
	if(po==0){
		for(int i=1;i<=27;i++){
			ope[i]=f[i];
		}
		gre=p;
		return;
	}//边界判断:是否均为12点(即a[i]均为0)
	for(int i=1;i<=9;i++){
		cout<<i;
		if(gre>p+1&&used[i]<3){
			//cout<<p<<" "<<i<<" ";
			int pre[10];
			f[p+1]=i;
			for(int j=1;j<=9;j++){
				pre[j]=a[j];
				a[j]=(a[j]+move[i][j])%4;
			}
			used[i]++;
			search(i,p+1);
			for(int j=1;j<=9;j++){
				a[j]=pre[j];
			}
			used[i]--;
		}
	}
}//dfs
int main(){
	for(int i=1;i<=9;i++){
		scanf("%d",&a[i]);
		a[i]=a[i]%4;
	}
	search(0,0);
	//for(int i=1;i<=9;i++)cout<<a[i]<<" ";
	for(int i=1;i<=gre;i++){
		cout<<ope[i];
	}
	return 0;
}
2023/1/12 20:29
加载中...