棋盘问题
#include<bits/stdc++.h>
using namespace std;
void func(int,int);
bool tf(int,int);
void c();
int n,k;
char a[110][110];
int cnt2=0;
int main()
{
cin>>n>>k;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cin>>a[i][j];
}
}
func(0,0);
cout<<"----------"<<endl;
cout<<cnt2;
return 0;
}
void func(int x,int cnt)
{
if(cnt==k)
{
c();
cnt2++;
return;
}
if(x==n)
{
return;
}
for(int i=0;i<n;i++)
{
if(tf(x,i)==true&&a[x][i]!='.')
{
a[x][i]='o';
func(x+1,cnt+1);
a[x][i]='.';
}
}
func(x+1,cnt);
}
bool tf(int x,int y)
{
for(int i=0;i<x;i++)
{
if(a[i][y]=='o')
{
return false;
}
}
return true;
}
void c()
{
cout<<"----------"<<endl;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cout<<a[i][j];
}
cout<<endl;
}
}