http://poj.org/problem?id=1321
由于搜索是原来写的,而集训的时候没来所以只能现在补补咯-_-
简单的深搜
#include<stdio.h> #include<string.h> #include<algorithm> #include<stdlib.h> #define N 10 #define INF 0xfffffff #include<math.h> #include<iostream> using namespace std; int n,ans,k,num,vis[N],sx,sy; char maps[N][N]; void dfs(int m)//m是第几行; { int i; if(num==k) { ans++; return ; } if(m>=n) return ; for(i=0;i<n;i++) { if(vis[i]==0&&maps[m][i]=='#') { num++; vis[i]=1; dfs(m+1); vis[i]=0; num--; } } dfs(m+1); } int main() { while(scanf("%d %d",&n,&k),k!=-1||n!=-1) { memset(vis,0,sizeof(vis)); int wall=0; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { cin>>maps[i][j]; } } ans=num=0; dfs(0); printf("%d ",ans); } return 0; }