这个题要是乍一看很难会想深搜,确实如此,可如果知道了深搜的方法,这个题就简
了不少,至于用深搜的时候要考虑当k==n和k<n时这咱种情况,当K==n时,当然很好想
到深搜搜下很容易找到所有方法,,但是当k<n时就得考虑后面的情况,
所以后面加了个dfs(row+1,num)主要是这种情况的考虑。 #include <stdio.h>
#include <string.h>
#include <iostream>
#include <cstring>
using namespace std; int used[9][9],n,number,k,colvis[9];//colvis用于放置棋子的列标记
char c; void dfs (int row,int num)
{
if (num==k)//当一种方式搜完后,方式加 1;
{
number++;
return;
}
if (row > n)return ;//当行数超过时,深搜结束。
for (int 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()
{ while (scanf("%d%d",&n,&k)!=EOF )
{
if (n==-1 && k==-1)break;
number = 0;
memset(colvis,0,sizeof(colvis));
memset(used,0,sizeof(used));
for (int i=1; i<=n; i++)
for (int j=1; j<=n; j++)
{
cin >> c;
if (c=='#')
used[i][j] = 1;
}
dfs(1,0);
printf("%d\n",number);
}
return 0;
}

中文题

dfs 搜完把同行同列全置为不可用就行了

最新文章

  1. 数塔取数 基础dp
  2. Cent0S 升级Python会带来的问题
  3. android如何实现文件按时间先后顺序排列显示
  4. 数字PID控制算法
  5. uva 10929 - You can say 11
  6. JAVA Socket无参构造方法的使用
  7. git彻底删除commit记录的方法
  8. 日常API之图灵聊天机器人
  9. GC调优
  10. scss、less 对浏览器兼容的处理方法, css 的单行溢出、多行溢出
  11. Cortex-A15架构解析:它为什么这么强(转)
  12. 文件如何转换成pdf或html格式
  13. 解决网页出现 net::ERR_ABORTED 404 (Not Found)问题
  14. 【LOJ】#2568. 「APIO2016」烟花表演
  15. 用Java位运算实现加减乘除四则运算
  16. c++ 容器填充指定长度(fill_n)
  17. 3.2_k-近邻算法案例分析
  18. redis lua 用来传输日志
  19. 细说 Django — web 前后端分离
  20. docker查看容器

热门文章

  1. FTP主动连接与被动连接
  2. js判断有无属性
  3. 关于dispatch_semaphore的使用
  4. JAVA基础补漏--基础数据类型与引用数据类型
  5. Jboss remote getshell (JMXInvokerServlet) vc版
  6. JavaWeb -- Servlet+JSP+JavaBean(MVC)模式
  7. java多线程模拟停车位问题
  8. ubuntu安装Qt5
  9. 阿里云 linux 找回mysql root密码
  10. 命令行下载Baiduyun files