1 条题解

  • 1
    @ 2025-1-7 11:49:15

    C++ :

    #include<bits/stdc++.h>
    using namespace std;
    int a[10][10],r[10][10],c[10][10],g[10][10];
    char s[10][10];
    void prin()
    {
    	for (int i=1;i<=9;i++){
    		for (int j=1;j<=9;j++) cout<<a[i][j];
    		cout <<endl;
    	}
    	  
    }
    void dfs(int x,int y)
    {
    	//if (x<2) cout << endl << x <<" "<<y;
    	if (x > 9){
    		prin();return;
    	}
    	if (a[x][y]){
    		if (y == 9)  dfs(x+1,1);
    		else dfs(x,y+1);
    		
    	}
    	else{
    		int k = 3 * ((x - 1) / 3) + (y - 1) / 3 + 1;
    		for (int i=1;i<=9;i++)
    		   if (!r[x][i] && !c[y][i] && !g[k][i]){
    		   	   a[x][y] = i;
    		   	   r[x][i] = 1;
    		   	   c[y][i] = 1;
    		   	   g[k][i] = 1;
    		   	   if (y == 9)  dfs(x+1,1);
    		   	   else  dfs(x,y+1);
    		   	   	a[x][y] = 0;
    		   	    r[x][i] = 0;
    		   	    c[y][i] = 0;
    		   	    g[k][i] = 0;
    		   }
    	}
    }
    int main()
    {
        for (int i=1;i<=9;i++){
        	cin >> s[i];
        	for (int j=1;j<=9;j++){
        		if (s[i][j-1] != '?'){
        			int x = s[i][j-1]-'0';
        			a[i][j]= x;
        			r[i][x] = 1;
        			c[j][x] = 1;
        			int k = 3 * ((i - 1) / 3) + (j - 1) / 3 + 1;
        			g[k][x] = 1;
    			} 
    		}
    	}
    	//for (int i=1;i<=9;i++) 
    	   //for (int j=1;j<=9;j++)  if (g[i][j]) cout << i << j <<endl;
        dfs(1,1); 	    
        return 0;
    }
    

    信息

    ID
    1090
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    4
    已通过
    2
    上传者