1 条题解

  • 0
    @ 2022-10-5 15:05:22
    #include<bits/stdc++.h>
    using namespace std;
    char a[1000][1000],bj[9]={'1','2','3','4','5','6','7','8','9'};
    int b[1000][1000],n,sum,x,g;
    int pd(int x,int y){
    	for(int i=1;i<=n;i++){
    		if(b[x][y]==a[x][i])return 0;
    	}
    	for(int i=1;i<=n;i++){
    		if(b[x][y]==a[i][y])return 0;
    	}
    	return 1;
    }
    void dfs(int x,int y,int t){
    	if(t==x){
    		sum++;
    		return;
    	}
    	if(b[x][y]==0){
    		if(y==n)dfs(x+1,1,t);
    		else dfs(x,y+1,t);
    	}
    	else{
    		for(int i=0;i<n;i++){
    			b[x][y]=bj[i];
    			int s=pd(x,y);
    			if(s==0)continue;
    			else{
    				if(y==n)dfs(x+1,1,t+1);
    				else dfs(x,y+1,t+1);
    			}
    		}
    		return;
    	}
    }
    int main(){
    	cin>>n;
    	for(int i=1;i<=n;i++){
    		for(int j=1;j<=n;j++){
    			cin>>a[i][j];
    			if(a[i][j]=='*'){
    				b[i][j]++;
    				x++;
    				a[i][j]='0';
    			}
    		}
    	}
    	dfs(1,1,0);
    	cout<<sum;
    	return 0;
    }
    

    信息

    ID
    688
    时间
    1000ms
    内存
    16MiB
    难度
    8
    标签
    递交数
    12
    已通过
    10
    上传者