1 solutions

  • 0
    @ 2026-4-23 16:19:11
    #include<bits/stdc++.h>
    using namespace std;
    const int N=10;
    bool st[N];
    char g[N][N];
    int n,k;
    int ans=0;
    void dfs(int r,int y)
    {
    	if(y==k+1) //已经放完了k个国王 
        {
            ans++;
            return ;
        }
        if(r>=n) return ;
    
        for(int j=0;j<n;j++) //枚举每列 
        {
            if(g[r][j]=='#'&&st[j]==0)
            {
                st[j]=1; //标记列 
                dfs(r+1,y+1); //去下一行 
                st[j]=0;
            }
        }
        dfs(r+1,y); //当前这行不放国王 
    }
    int main()
    {
        while(cin>>n>>k)
        {
            ans=0;
            memset(st,0,sizeof st); //清空标记 
            if(n==-1&&k==-1) break;
            for(int i=0;i<n;i++) cin>>g[i];
            dfs(0,1);
            cout<<ans<<endl;
             
        }
    }
    
    
    
    
    • 1

    Information

    ID
    241
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    5
    Tags
    # Submissions
    28
    Accepted
    8
    Uploaded By