编译失败求助
查看原帖
编译失败求助
692597
wyd123QAZ楼主2023/10/9 22:21

第52行报错

#include<bits/stdc++.h>
using namespace std;

const int N=9;
int ones[1<<N],map[1<<N];
int row[N],col[N],cell[3][3];
int g[N][N];
int ans=-1;

int lowbit(int x){
	return x&-x;
}

void init(){
	for(int i=0;i<N;i++){
		row[i]=col[i]=(1<<N)-1;
	}
	for(int i=0;i<3;i++){
		for(int j=0;j<3;j++){
			cell[i][j]=(1<<N)-1;
		}
	}
}

int get_score(int x,int y){
	return min(min(x,8-x),min(y,8-y))+6;
}

int get(int x,int y){
	return row[x]&col[y]&cell[x/3][y/3];
}

bool dfs(int cnt,int score){
	if(!cnt){
		ans=max(ans,score);
		return false;
	}
	int minv=10;
	int x,y;
	for(int i=0;i<N;i++){
		for(int j=0;j<N;j++){
			if(!g[i][j]){
				int t=ones[get(i,j)];
				if(t<minv){
					minv=t;
					x=i,y=j;
				}
			}
		}
	}
	for(int i=get(x,y);i;i-=lowbit(i)){
		int t=map[lowbit(i)];
		row[x]-=1<<t;
		col[y]-=1<<t;
		cell[x/3][y/3]-=1<<t;
		g[x][y]=t+1;
		
		if(dfs(cnt-1,score+get_score(x,y)*(t+1)))
			return true;
		row[x]+=1<<t;
		col[y]+=1<<t;
		cell[x/3][y/3]+=1<<t;
		g[x][y]=0; 
	}
	return false;
}
int main(){
	for(int i=0;i<N;i++){
		map[1<<i]=i;
	}
	for(int i=0;i<1<<N;i++){
		int s=0;
		for(int j=1;j;j-=lowbit(j))
			s++;
		ones[i]=s;	
	}
	init();
	int cnt=0,score=0;
	for(int i=0,k=0;i<N;i++){
		for(int j=0;j<N;j++){
			int x;
			cin>>x;
			g[i][j]=x;
			if(x){
				row[i]-=1<<(x-1);
				col[j]-=1<<(x-1);
				cell[i/3][j/3]-=1<<(x-1);
				score+=get_score(i,j)*x;
			}
			else{
				cnt++;
			}
		}
	}
	dfs(cnt,score);
	cout<<ans;
		return 0;
}
2023/10/9 22:21
加载中...