POJ1321 - 棋盘问题 - 简单DFS
题意
中文题
PS
我感觉再简单的DFS我写总还是有错误,关键是自己还看不出来。
AC代码
#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
#include<cmath>
#include<list>
#include<stdlib.h>
#include<map>
#include<stack>
#include<stdio.h>
#include<queue>
using namespace std;
typedef long long ll;
#define sc(T) scanf("%d",&T)
#define scc(x,y) scanf("%d %d",&x,&y)
#define pr(T) printf("%d\n",T)
#define f(a,b,c) for (int a=b;a<=c;a++)
#define ff(a,b,c) for (int a=b;a>=c;a--)
#define inf 0x3f3f3f3f
#define mem(a,b) memset(a,b,sizeof(a))
#define eps 1e-9
#define PI acos(-1)
int n,k,ans;
char s[10][10];
int to[4][2]= {{0,1},{0,-1},{1,0},{-1,0}};
//bool book[10][10];
bool book[10]; // 标记列就行
void dfs(int x,int cnt)
{
if(cnt==k)
ans++;
//ans++;
//book[x][y]=1;
// for(int i=0; i<4; i++)
// {
// int tx=x+to[i][0];
// int ty=y+to[i][1];
// if(tx>=0&&tx<n&&ty>0&&ty<n&&a[tx][ty]!='#'&&judge(x,y)&&!book[x][y])
// {
// book[tx][ty]=1;
// dfs(tx,ty);
// book[tx]p[ty]=0;
// }
// }
for(int i=x; i<n; i++)
{
for(int j=0; j<n; j++)
{
if(s[i][j]=='#'&&!book[j])
{
//book[x][y]=1;
book[j]=1;
dfs(i+1,cnt+1); //不是 dfs(x++,cnt++)
//book[x][y]=0;
book[j]=0;
}
}
}
}
int main()
{
while(~scanf("%d %d",&n,&k))
{
if(n==-1&&k==-1)
break;
ans=0;
memset(book,0,sizeof(book));
for(int i=0; i<n; i++)
cin>>s[i];
// for(int i=0; i<n; i++)
// {
// for(int j=0; j<n; j++)
// {
// memset(book,0,sizeof(book));
// dfs(i,j);
// }
// }
dfs(0,0); //0行开始 cnt=0
cout<<ans<<endl;
}
return 0;
}