dfs套路:
void dfs(int step)
{
if(边界成立)
{
。。。。
return;
}
for(尝试每一种可能)
{
把这种可能标记表示走过
继续下一步dfs(step+1);
把这种可能标记去除
}
return;
}
POJ 1321
#include<stdio.h>
#include<string.h>
int n,m,ans;
int vis[15];
char mp[10][10];
void dfs(int cur,int num)
{
if(num==m)
{
ans++;
return ;
}
for(int i=cur;i<n;i++)
for(int j=0;j<n;j++)
{
if(vis[j]==0&&mp[i][j]=='#')
{
vis[j]=1;
dfs(i+1,num+1);
vis[j]=0;
}
}
return ;
}
int main()
{
while(~scanf("%d%d",&n,&m)&&n!=-1&&m!=-1)
{
for(int i=0;i<n;i++)
scanf("%s",mp[i]);
memset(vis,0,sizeof(vis));
ans=0;
dfs(0,0);
printf("%d\n",ans);
}
return 0;
}