当前位置: 代码迷 >> 综合 >> POJ - 1321 棋盘问题(DFS,递归与回溯)
  详细解决方案

POJ - 1321 棋盘问题(DFS,递归与回溯)

热度:111   发布时间:2023-11-25 07:22:36.0

POJ - 1321 棋盘问题(DFS,递归与回溯)

#include<cstdio>
#include<cstring>
char g[10][10];
int n,k,ans,col[10];
void dfs(int u,int cnt)
{
    if(cnt==k)//如果此时满了,即使装满了,就ans++{
    ans++;return;}if(u==n) return;dfs(u+1,cnt);//这一行不放棋子for(int i=0;i<n;i++){
    if(g[u][i]=='#'&&!col[i]){
    col[i]=true;dfs(u+1,cnt+1);//代表的是下一行,然后是用掉了一个棋子col[i]=false;//恢复现场}}
}
int main()
{
    while(scanf("%d%d",&n,&k)!=EOF){
    if(n==-1&&k==-1) break;memset(col,0,sizeof col);memset(g,0,sizeof g);ans=0;for(int i=0;i<n;i++) scanf("%s",g[i]);dfs(0,0);printf("%d\n",ans);}return 0;
}