求助
查看原帖
求助
263451
cjy2008楼主2021/2/17 17:44

调了一下午,枯了

#include<bits/stdc++.h>
using namespace std;
struct hang{
	int num,sum;
}yo[10];
struct spot{
	int x,y,score,gong;
}a[10];
int mapp[10][10];
int h[10][10];
int l[10][10];
int g[10][10];
int now;
int ans;
int u;
int score(int x,int y){
	if(x==1||y==1||x==9||y==9)return 6;
    else if(x==2||y==2||x==8||y==8)return 7;
    else if(x==3||y==3||x==7||y==7)return 8;
	else if(x==4||y==4||x==6||y==6)return 9;
    else return 10;
}
int getgong(int x,int y){
	if(x<=3){
		if(y<=3) return 1; 
		else if(y<=6) return 2;
		else return 3;
	}
	else if(x<=6){
		if(y<=3) return 4; 
		else if(y<=6) return 5;
		else return 6;
	}
	else{
		if(y<=3) return 7; 
		else if(y<=6) return 8;
		else return 9;
	}
}
void dfs(int o,int sc){
	if(o==u){
		ans=max(sc,ans);
		return;
	}
	for(int i=1;i<=9;i++){
		if(h[a[o].x][i]==0&&l[a[o].y][i]==0&&g[a[o].gong][i]==0){
			h[a[o].x][i]=l[a[o].y][i]=g[a[o].gong][i]=1;
			dfs(o+1,sc+(a[o].score*i));
			h[a[o].x][i]=l[a[o].y][i]=g[a[o].gong][i]=0;
		}
	}
}
bool cmp(hang x,hang y){
	return x.sum<y.sum;
}
int main(){
	ans=-1;
	for(int i=1;i<=9;i++){
		for(int j=1;j<=9;j++){
			cin>>mapp[i][j];
			if(mapp[i][j]>0){
				h[i][mapp[i][j]]=1;
				l[j][mapp[i][j]]=1;
				g[getgong(i,j)][mapp[i][j]]=1;
				now+=score(i,j)*mapp[i][j];
			}
			else yo[i].sum++;
		}
		yo[i].num=i;
	}
	sort(yo+1,yo+10,cmp);
	for(int i=1;i<=9;i++){
		for(int j=1;j<=9;j++){
			if(mapp[yo[i].num][j]==0){
				u++;
				a[u].x=yo[i].num,a[u].y=j,a[u].gong=getgong(a[u].x,a[u].y),a[u].score=score(a[u].x,a[u].y);
			}
		}
	}
	dfs(1,0);
	if(ans==-1){
		cout<<-1;
		return 0;
	}
	cout<<ans+now;
//	cout<<u<<endl;
//	for(int i=1;i<=u;i++) cout<<a[i].x<<' '<<a[i].y<<' '<<a[i].gong<<' '<<a[i].score<<endl;
	return 0;
}

求帮忙

2021/2/17 17:44
加载中...