没什么意思,注意下细节
//#include<bits/stdc++.h> #include<iostream> #include<cstdio> #include<cstring> #define inf (0x3f3f3f3f) using namespace std; const int maxn = 16; char Grape[maxn][maxn]; bool vis[maxn]; int n,k,ans; void dfs(int row,int num) { if(num==k) { ++ans; return; } if(row>n) return; for(int i=1;i<=n;++i) { if(Grape[row][i]=='#'&&!vis[i]) {//对于每一个地图的未访问过节点 vis[i] = true; dfs(row+1,num+1); vis[i] = false; } } dfs(row+1,num);//(SB了,不放旗子时是不需要有位置可以的)拿出循环外,找了n久,一直TLE } int main() { ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); while(cin>>n>>k) { if(n==-1) break; for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) cin>>Grape[i][j]; memset(vis,false,sizeof(vis));//每一列 ans = 0; dfs(1,0); cout<<ans<<'\n'; } }

  

01-18 00:31