棋盘问题

Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 8895   Accepted: 4278

Description

在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放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

21
 1 #include <cstdlib>
 2 #include <iostream>
 3 #include <cstdio>
 4 #include <algorithm>
 5 #include <string.h>
 6 #include <cmath>
 7 using namespace std;
 8
 9 char map[10][10];
10 int c;
11
12 int check(int n,int i)
13 {
14     int j;
15     for(j=1;j<=n;j++)
16     if(map[j][i]=='0')
17     return 0;
18     return 1;
19 }
20
21 int dfs(int n,int num,int s)
22 {
23     int i,j,k;
24
25     if(num==0)
26     {c++;return 1;}
27     if((n-s+1)<num)
28     return 0;
29
30
31     for(i=s;i<=n;i++)
32     for(j=1;j<=n;j++)
33     {
34                      if(map[i][j]!='#')
35                      continue;
36                      if(!check(i,j))
37                      continue;
38
39                      map[i][j]='0';
40                      dfs(n,num-1,i+1);
41                      map[i][j]='#';
42     }
43
44     return 1;
45 }
46
47
48
49
50 int main(int argc, char *argv[])
51 {//freopen("C:/Users/shp/Desktop/in.txt","r",stdin);
52  //freopen("C:/Users/shp/Desktop/out.txt","w",stdout);
53  int n,k,i,j;
54  while(scanf("%d%d",&n,&k)!=EOF)
55  {
56                  if((n==-1)&&(k==-1))
57                  break;
58                  getchar();
59                  for(i=1;i<=n;i++)
60                  {for(j=1;j<=n;j++)
61                  scanf("%c",&map[i][j]);
62                  getchar();
63                  }
64
65                  c=0;
66
67                  dfs(n,k,1);
68                  cout<<c<<endl;
69
70  }
71
72
73
74
75
76
77
78     system("PAUSE");
79     return EXIT_SUCCESS;
80 }

转载于:https://www.cnblogs.com/zjushuiping/archive/2012/05/31/2528169.html

POJ1321 棋盘问题相关推荐

  1. 【POJ1321棋盘问题】【poj2251Dungeon Master】【poj3278Catch That Cow】【poj1426Find The Multi】

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

  2. POJ1321 棋盘问题(DFS)

    深度搜索,但是要注意搜索的方式: 本文给出两份代码,一份是AC代码,一份是超时的,你们感受下. 从第一行开始,对于每一行,搜索整行,如果有'#',标记,然后,则搜索下一行. AC代码: /*POJ13 ...

  3. POJ1321(棋盘问题)

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

  4. poj1321棋盘问题

    题目链接 Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆 ...

  5. POJ1321 Bailian1321 棋盘问题【DFS】

    棋盘问题 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 52525   Accepted: 25387 Descriptio ...

  6. 简单搜索 poj1321

    poj1321 棋盘问题 #pragma warning(disable:4996) #include<iostream> #include<string> #include& ...

  7. ACM题集以及各种总结大全(转)

    ACM题集以及各种总结大全! 虽然退役了,但是整理一下,供小弟小妹们以后切题方便一些,但由于近来考试太多,顾退役总结延迟一段时间再写!先写一下各种分类和题集,欢迎各位大牛路过指正. 一.ACM入门 关 ...

  8. CCF认证训练行动路线图

    通过CCF认证的训练题选自三个方面,一是CCF认证试题,二是使用北大百练的练习题等等,三是ACM-ICPC的练习题. CCF认证的试题是必须练习的,通过CCF试题的练习有助于了解试题风格特点.然而CC ...

  9. 《程序设计技术》课程辅助学习资料

    本文档提供课程相关的辅助学习资料. 阅读程序是提高程序设计水平的最为有效的方法,<程序设计技术>课程至少应该阅读后面提供链接博文中的基础部分.能够阅读完基础部分的博文,则可以给课程学习奠定 ...

最新文章

  1. Linux+mysql重置_linux环境mysql重置密码
  2. python爬虫案例讲解-Python爬虫案例集合
  3. 从Struts2 action 获取json 数据格式 显示到Jquery EasyUI
  4. Wince 添加中文字库
  5. 智能机浏览器版本信息获取
  6. 一个免费调用的OData服务,无需用户名密码,适用于SAP UI5的学习
  7. 专业的在线ps照片处理网页源码
  8. 去除狂人采集器添加在帖子中的广告信息
  9. Wireshark验证TCP三次握手四次挥手
  10. sencha touch 入门学习资料大全
  11. ajax中加html,向DIV中写入HTML(AJAX高手赐教)
  12. WordPress搬家教程:换空间与换域名
  13. 游戏开发中的那点英语
  14. 【IE知识】最系统、完整的标准工时学习资料;标准作业(SOP)详解;生产线布局规划
  15. python输入复数_如何在Python中作为用户输入获取复数?
  16. Java doc转docx
  17. ArcGIS ArcTooBox中的工具执行没有结果的处理办法
  18. # 这是一级标题 ## 这是二级标题
  19. 【笔记】微信开发者工具自定义编译模式(编译时,携带 指定参数 直接跳转 指定页面)
  20. Mysql 查询数据库容量大小的方法步骤

热门文章

  1. Java判断文件类型
  2. mysql 代替intersect_MySQL不支持INTERSECT和MINUS及其替代方法_MySQL
  3. excel批量更改超链接_Excel如何批量建立超链接,搭建工作台
  4. LA2965侏罗纪(异或和为0的最大数字个数)
  5. 计算机网络-信道的极限容量
  6. 【MATLAB】界面介绍 ( 标题栏 | 选项卡 | 命令窗口 | 编辑器 | 变量命名规则 )
  7. 【Flutter】Icons 组件 ( 加载 Flutter 内置的图标 | 材料设计图标完整展示 )
  8. 模拟layui弹出层
  9. POJ - 1509 Glass Beads
  10. win10系统下多python版本部署