在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。 Input

输入含有多组测试数据。
每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n
当为-1 -1时表示输入结束。
随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白区域(数据保证不出现多余的空白行或者空白列)。

Output

对于每一组数据,给出一行输出,输出摆放的方案数目C (数据保证C<2^31)。

Sample Input

2 1
#.
.#
4 4
...#
..#.
.#..
#...
-1 -1

Sample Output

2
1
#include<stdio.h>
#include<string.h>
int used[9][9],n,number,k,colvis[9];//colvis用于放置棋子的列标记
char qian[10][10];
void dfs(int row,int num)
{int j;if(num==k)//当一种方式搜完后,方式加1{number++;return;}if(row>n)return;//当列数超过时深搜结束for(j=1;j<=n;j++){if(used[row][j]&&!colvis[j]){colvis[j]=1;dfs(row+1,num+1);colvis[j]=0;//回溯后,重新标记为未使用状态}}dfs(row+1,num);return;
}
int main()
{int i,j;while(scanf("%d%d",&n,&k)!=EOF){getchar();if(n==-1&&k==-1)break;number=0;memset(colvis,0,sizeof(colvis));memset(used,0,sizeof(used));for(i=1;i<=n;i++)gets(qian[i]);for(i=1;i<=n;i++)for(j=0;j<n;j++){if(qian[i][j]=='#')used[i][j+1]=1;}dfs(1,0);printf("%d\n",number);}return 0;
}

POJ1321(深搜)相关推荐

  1. Go 分布式学习利器(15) -- Go 实现 深搜和广搜

    强化语法,回顾算法. 通过Go语言实现 深度优先搜索 和 广度优先搜索,来查找社交网络中的三度好友关系(三度指的是一个节点到 其相邻节点 到 其相邻节点的节点 ,图递增三层好友关系). 涉及到的Go语 ...

  2. 水管工游戏 (深搜)

    水管工游戏 本题依然是采用搜索,深搜,广搜都可以,本代码采用深搜,此题在搜索时需要增加一些判断条件以及下一步要搜索的位置即可. 代码如下: #include<stdio.h> int a[ ...

  3. Poj(2488),按照字典序深搜

    题目链接:http://poj.org/problem?id=2488 思路:按照一定的字典序深搜,当时我的想法是把所有的可行的路径都找出来,然后字典序排序. 后来,凡哥说可以在搜索路径的时候就按照字 ...

  4. [数据结构] 迷宫问题(栈和队列,深搜和广搜)

    代码: #include <iostream> #include <string.h> #include <stack> #include <queue> ...

  5. 迷宫问题最短捷径c语言深搜,迷宫问题 C语言实现(深搜)

    问题描述: 2015年05月21日 10:24:05 这是我自己出的一道题   其原型基于迷宫问题,用深搜来解决的!我就简单的说一说吧! 给定一个N * M 的迷宫!,1代表有障碍,0代表无障碍可通行 ...

  6. POJ-1724 深搜剪枝

    这道题目如果数据很小的话.我们通过这个dfs就可以完成深搜: void dfs(int s) {if (s==N){minLen=min(minLen,totalLen);return ;}for ( ...

  7. POJ2044 深搜+剪枝(云彩下雨)

    题意:        有一个城镇,是4*4的大小的,然后你控制一块云彩,2*2的,你每天可以有9种走的方法,上下左右,或者不动,走的时候可以走1或者2步,云彩所在的地方肯定会下雨,然后给你做多365天 ...

  8. hdu4876 深搜+(随机枚举剪枝)

    题意:       给你n个数,让你从选择k个数,然后排成一个环(k个数的顺序随意,但是排成一个环后就不能变了),然后可以在这个环上任意的找连续w个数(w<=k),可以找多次,得到一个值等于当前 ...

  9. 单词拼接 ----- 深搜

    先判断这些单词能不能构成 接龙 , 能的话在排序 , 然后深搜确定接龙 . 题解 : 如果先确定所有单词的首尾字母的个数 , 如果首字母个数等于尾字母个数就不用管了 , 如果发现首字母比尾字母大1那个 ...

最新文章

  1. DDD领域驱动设计之聚合、实体、值对象
  2. C8-1 复数加减乘除 (100/100 分数)
  3. mysql第一二章笔记_MYSQL必知必会读书笔记 第一章(基础)
  4. 年前最后一波成绩单,请查收!
  5. ScrollView与TableView实现选择效果
  6. 一道简单的编程题,不过您做对了吗?
  7. wuzhicms刷新按钮的功能开发
  8. 关于文件中的0D、0A
  9. 每天工作4小时的程序员_IT新闻_博客园
  10. CC1101接口库在STM32上的移植
  11. 华为员工离职心声:菊厂15年退休,感恩,让我实现了财务自由!
  12. 有心杀贼,无力回天出处
  13. 基于django的个人博客开发
  14. mata name,property=og:title|og:image的几种说明
  15. 如何看linux系统中有没有安装cuda,Linux系统CUDA10.2+CUDNN安装教程
  16. CCG7D双C口车用充电芯片
  17. 经典算法-递归-角谷定理
  18. Java——检索一段话中出现次数最多的英文单词
  19. Failed to shutdown database console gracefully
  20. 光立方原理讲解_电工基础知识——光电耦合器的分类、工作原理和检测以及应用...

热门文章

  1. 使用TryParse()来执行数值转换
  2. 【java基础 12】HashMap中是如何形成环形链表的?
  3. fedora22有时不能启动
  4. python之路 day5
  5. JavaScript 中 Property 和 Attribute 的区别
  6. 【转】win7下VS2008过期的解决办法
  7. vs2017编译网狐荣耀服务端的心得
  8. eclipse建maven pom报错
  9. C语言之结构体(2)
  10. Jquery,Ready函数.