捞捞我
查看原帖
捞捞我
878275
taskkill_same楼主2025/1/1 19:49

rt

大佬们救救我

#include<iostream>
using namespace std;
int target[10][10];
int lrg=5,mal=5;
int sce=10;
int test_h,test_l;
int ibu[5];
int form[10][10];
bool note[10][10];
int ans[10][10];
int ort[81][2];
int test_order;
int flag=0;
int next_h,next_l;
bool allow[10][10];
bool line[10][10];
bool sqare[10][10];
int order[5][33][2];
int _end;
int tot=0;
int numsqare(int x,int y){
	return ((y-1)/3)+1+3*((x-1)/3);
}
void set_target(){
	target[5][5]=10;
	for(int j=0;j<5;j++){
		lrg++;
		mal--;
		sce--;
		for(int i=1;i<=9;i++){
			target[mal][i]=sce;
			target[lrg][i]=sce;
			target[i][mal]=sce;
			target[i][lrg]=sce;
		}
	}	
	for(int i=1;i<=9;i++){
		for(int j=1;j<=9;j++){
			ibu[10-target[i][j]]++;
			order[10-target[i][j]][ibu[10-target[i][j]]][0]=i;
			order[10-target[i][j]][ibu[10-target[i][j]]][1]=j;
		}
	}
	int tol=0;
	for(int i=1;i<=5;i++){
		for(int j=1;j<=32;j++){
			if(order[i][j][0]!=0||order[i][j][1]!=0){
				tol++;
				if(test_h==order[i][j][0]&&test_l==order[i][j][1]){
					test_order=tol;
				}
				ort[tol][0]=order[i][j][0];
				ort[tol][1]=order[i][j][1];
			}
		}
	}
}
void dfs(int nubr){
	if(_end==1){
		return ;
	}else if(ort[nubr][0]==9&&ort[nubr][1]==9){
		_end=1;
		cout<<endl<<endl<<tot<<endl<<endl;
		return ;
	}else if((note[ort[nubr][0]][ort[nubr][1]]==1)||(ort[nubr][0]==0&&ort[nubr][1]==0)){
		dfs(nubr+1);
		return ;
	}
	for(int os=9;os>=1;os--){
		if(allow[ort[nubr][1]][os]==0&&line[ort[nubr][0]][os]==0&&sqare[numsqare(ort[nubr][0],ort[nubr][1])][os]==0){
			allow[ort[nubr][1]][os]=1;
			line[ort[nubr][0]][os]=1;
			sqare[numsqare(ort[nubr][0],ort[nubr][1])][os]=1;
			ans[ort[nubr][0]][ort[nubr][1]]=os;
			tot+=os*target[ort[nubr][0]][ort[nubr][1]];
			dfs(nubr+1);
			tot-=os*target[ort[nubr][0]][ort[nubr][1]];
			allow[ort[nubr][1]][os]=0;
			line[ort[nubr][0]][os]=0;
			sqare[numsqare(ort[nubr][0],ort[nubr][1])][os]=0;
		} 
	}
	if(nubr==1){
		cout<<-1<<endl;
		_end=1;
	}
	return ;
}
int main(){
	for(int i=1;i<=9;i++){
		for(int j=1;j<=9;j++){
			cin>>form[i][j];
			if(form[i][j]!=0){
				note[i][j]=1;
				allow[j][form[i][j]]=1;
				line[i][form[i][j]]=1;
				sqare[numsqare(i,j)][form[i][j]]=1;
				ans[i][j]=form[i][j];
			}
		}
	}
	set_target();
	dfs(1);
	for(int i=1;i<=9;i++){
		for(int j=1;j<=9;j++){
			cout<<ans[i][j]<<" ";
		}
		cout<<endl;
	}
}
2025/1/1 19:49
加载中...