求调~~
#include<bits/stdc++.h>
#define int long long
#define fast register int
using namespace std;
const int N=1e3+100;
int n,m,tt,cnt=0,ans=0x7f7f7f7f,lin[N];
char a[N][N];
bool vis[N],vis1[N];
void dfs(int xx,int z,int qwq){
if (qwq==m){
ans=min(ans,z);
return ;
}
vis[xx]=true;
for (fast i=1;i<=n;i++){
if (vis[i]==false){
for (fast j=1;j<=m;j++){
if (vis1[j]!=true&&a[i][j]=='o'){
qwq++;
lin[j]=1;
vis1[j]=true;
}
}
dfs(i,z+1,qwq);
for (fast j=1;j<=m;j++){
if (lin[j]==1){
qwq--;
lin[j]=0;
vis1[j]=false;
}
}
}
}
vis[xx]=false;
}
signed main(){
std::ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin>>n>>m;
for (fast i=1;i<=n;i++){
cnt=0;
for (fast j=1;j<=m;j++){
cin>>a[i][j];
if (a[i][j]=='o'){
cnt++;
}
}
if (cnt==m){
cout<<1;
return 0;
}
}
cnt=0;
for (fast i=1;i<=n;i++){
cnt=0;
memset(vis,false,sizeof(vis));
memset(vis1,false,sizeof(vis1));
memset(lin,0,sizeof(lin));
for (fast j=1;j<=m;j++){
if (a[i][j]=='o'){
vis1[j]=true;
cnt++;
}
}
dfs(i,1,cnt);
}
cout<<ans;
return 0;
}
/*
8 6
xxoxxo
xxoxxx
xoxxxx
xxxoxx
xxoooo
xxxxox
xoxxox
oxoxxo
*/