题目大意:
passsssssssssssssssss~~
解题思路:
简单搜索(dfs),传递参数x固定为行或者列,x++,for(int i=0; ……) if(vis[i]) 。
参考代码:
#include <iostream> #include <vector> #include <map> #include <string> #include <queue> #include <stack> #include <set> #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> using namespace std; const int INF=0x3f3f3f3f; const int SIZE=1e5+10; char mymap[10][10]; int n,k,p; int vis[10]; int ans=0; void dfs(int x) ///这里的x可以作为行也可以作为列 { if(p==k) { ans++;return; } if(x>n) return; else for(int i=0;i<n;i++) { if(mymap[i][x]=='#'&&!vis[i]) ///注意判断vis的一定是i { vis[i]=1; p++; dfs(x+1); p--; vis[i]=0; } } dfs(x+1); } int main() { while(scanf("%d%d",&n,&k)) { if(n==-1&&k==-1) break; ans=p=0; memset(vis,0,sizeof(vis)); getchar(); for(int i=0;i<n;i++) gets(mymap[i]); dfs(0); printf("%d ",ans); } }