dfs,
由于两处小小的错误,导致浪费好多时间
按行搜索,然后在把依搜索的列标记一下
#include <cstdio> #include <cstring> using namespace std; bool visi[100]; bool flag[100][100]; int ans,cnt,n,k; void dfs(int a) { if(cnt==k) {ans++;return ;} //k写成n了 if(a==n) return ; int i; for(i=0;i<n;i++) { if(!visi[i]&&flag[a][i]) { cnt++; visi[i]=true; dfs(a+1); cnt--; visi[i]=false; } } dfs(a+1); } int main() { int i,j; char s[10]; //freopen("1.txt","r",stdin); while(scanf("%d%d",&n,&k)!=EOF) { if(n==-1&&k==-1) break; memset(visi,false,sizeof(visi)); memset(flag,false,sizeof(flag)); cnt=0;ans=0; for(i=0;i<n;i++) { scanf("%s",s); for(j=0;j<n;j++) //n写成k了 { if(s[j]=='#') flag[i][j]=true; // printf("%c",s[j]); } } dfs(0); printf("%d ",ans); } return 0; }