当前位置: 首页 > news >正文

棋盘问题 dfs()基本的

Problem 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
2 1
Problem 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
2 1
***************************************************************************************************************************
基本dfs(),加计数;
***************************************************************************************************************************
 1 #include<iostream>
 2 #include<string>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<cstdio>
 6 using namespace std;
 7 char map[1001][1001];
 8 int vis[1001];
 9 int n,i,j,k;
10 int cnt;
11 void dfs(int x,int cur)
12 {
13      if(cur==k)
14      {
15          cnt++;//计数
16          return;
17      }
18      for(int i=x;i<n;i++)
19       for(int j=0;j<n;j++)
20        if(map[i][j]=='#'&&!vis[j])//保证了不同行,不同列
21         {
22             vis[j]=1;
23             dfs(i+1,cur+1);
24             vis[j]=0;//还原
25         }
26 }
27 int main()
28 {
29     while(scanf("%d%d",&n,&k)==2)
30     {
31         if(n==-1&&k==-1)
32            break;
33         memset(vis,0,sizeof(vis));
34         for(i=0;i<n;i++)
35         scanf("%s",map[i]);
36         cnt=0;
37         dfs(0,0);
38        printf("%d\n",cnt);
39     }
40 
41 }
View Code

 

转载于:https://www.cnblogs.com/sdau--codeants/p/3364140.html

相关文章:

  • URL 编码规则
  • TNS-01106: Listener using listener name LISTENER has already been started
  • C语言学习(三)--语句
  • 细说ASP.NET Forms身份认证
  • zabbix安装思路
  • 【转】checkedlistbox使用办法
  • Release Flutter的最后一公里
  • 关于PredicateT委托
  • Groovy String类型null和empty()判断
  • 使用GitHub进行团队合作
  • 源码阅读:SDWebImage(十八)——UIView+WebCache
  • Visual Studio 2015 介绍
  • ftp的主动模式active mode和被动模式 passive mode的配置和区别
  • BZOJ3932[CQOI2015]任务查询系统——主席树
  • DotNetTextBox V3.0 所见即所得编辑器控件 For Asp.Net2.0(ver 3.1.7Beta)
  • [数据结构]链表的实现在PHP中
  • 【391天】每日项目总结系列128(2018.03.03)
  • Angularjs之国际化
  • Facebook AccountKit 接入的坑点
  • JavaScript-Array类型
  • JavaScript的使用你知道几种?(上)
  • mockjs让前端开发独立于后端
  • Otto开发初探——微服务依赖管理新利器
  • spring cloud gateway 源码解析(4)跨域问题处理
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • Vue--数据传输
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 前端学习笔记之观察者模式
  • 微信小程序填坑清单
  • 学习笔记:对象,原型和继承(1)
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • #{} 和 ${}区别
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (2)nginx 安装、启停
  • (4)(4.6) Triducer
  • (4)logging(日志模块)
  • (C语言)字符分类函数
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (原創) 物件導向與老子思想 (OO)
  • (转)Oracle存储过程编写经验和优化措施
  • (转)为C# Windows服务添加安装程序
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .Net Core 中间件验签
  • .Net多线程总结
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • @Transient注解
  • [ C++ ] template 模板进阶 (特化,分离编译)
  • [AIGC] Redis基础命令集详细介绍
  • [Asp.net MVC]Asp.net MVC5系列——Razor语法
  • [bzoj 3534][Sdoi2014] 重建
  • [codeforces] 25E Test || hash