棋盘问题

十二届蓝桥杯青少年Python组省赛试题 第十二届省赛青少年Python组试题 阅读详情


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

#处可以放棋子,每行每列只能放一个,求放k个棋子的方法有多少种,呃,无脑的搜索题,这是深搜回溯的类型。

核心代码

void dfs(int x,int y)
{
	int i, j;
	if (y == k)
	{
		ans++;
	}
	else if (x<=n){
		for (i = 1; i <= n; i++)
		{
			if (!leap[i]&&a[x][i]=='#')
			{
				leap[i] = 1;
				dfs(x + 1, y + 1);
				leap[i] = 0;
			}
		}
		if (n - x + y >= k)
			dfs(x + 1, y);
	}
}

全代码

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
char a[9][9];
int leap[9], n, k;
long long ans;
void dfs(int x,int y)
{
	int i, j;
	if (y == k)
	{
		ans++;
	}
	else if (x<=n){
		for (i = 1; i <= n; i++)
		{
			if (!leap[i]&&a[x][i]=='#')
			{
				leap[i] = 1;
				dfs(x + 1, y + 1);
				leap[i] = 0;
			}
		}
		if (n - x + y >= k)
			dfs(x + 1, y);
	}
}
int main()
{
	int i, j, m;
	while (scanf("%d%d", &n, &k) != EOF){
		getchar(); ans = 0;
		if (n == -1 && k == -1)break;
		for (i = 1; i <= n; i++)
		{
			for (j = 1; j <= n; j++)
				cin >> a[i][j];
			getchar();
		}
		memset(leap, 0, sizeof(leap));
		dfs(1, 0);
		cout << ans << endl;
	}
	return 0;
}


 
对此类问题的一个总结:

int DFS(当前状态)
{
	if (终止条件) return 结果;
	for (所有从当前状态能到的状态)
	{
		if (下一个状态可行)
		{
			准备工作; 
			DFS(下一个状态);
			清理工作; 
		}
	}
}


还有一种搜索是对这个数列取或不取的搜索,这是一个具体实现(明天补上)

void bfs(int x)
{
	if (终止) 执行需要的操作;
	else
	{
		如果取这个数,操作;
		bfs(x + 1);
		还原;
		不取这个数的操作;
		bfs(x + 1);
		如果这样也能满足条件, 操作;
	}
}


四皇后问题【Python解法】【回溯算法】 经典四皇后问题(八皇后问题)Python解法。 使用DFS+剪枝+回溯。 容易理解的剪枝方法,快速简洁实现四皇后问题。 阅读详情

相关推荐

《算法导论》中动态规划习题15-6--在棋盘上移动

问题描述:假设有一张n*n个方格的棋盘以及一个棋子,必须根据以下的规则把棋子从棋盘的底边移动到棋盘的顶边,在每一步你可以把棋子移动到三个方格中的一个: 1、正上方的方格。 2、左上方的方格(只能当这个棋子不在最左列的时候) 3、右上方的方格(只能当这个棋子不在最右列的时候) 每次从方格x移动到方格y,会得到p(x,y)块钱。已知所有(x,y)的p(x,y),只要从x到y的移动是合法的。不要

7171

Python蓝桥杯练习13——n皇后问题

皇后问题

m0_48936146的博客 3511

国家医保移动支付国密算法SM2签名验签、SM4加解密DLL

DLL,非.net开发,所以无需安装配置,直接程序引用开发即可,支持各类开发语言。已知省份有广西、贵州、安徽、河北、黑龙江、湖南、吉林、江苏、四川、新疆等各地方。国家医保移动支付国密算法SM2签名验签、SM4加解密DLL。//SM4加密与解密。支持医保移动支付(国家统一版),//SM2签名与验签。

4263

n皇后(回溯法)C/C++

时间限制: 1 Sec 内存限制: 128 MB 题目描述 在n*n的棋盘摆放n个棋子,任意两个棋子都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 输入 输入一个整数n(1<=n<=8),表示棋子的个数。 输出 输出一个整数,表示棋子的摆法数目。 样例输入 4 样例输出 2 AC代码: #include<bits/stdc++.h> using namespace std; int n,cnt=0,a[20][20]; bool used[20]; bool judge(i

深巷 853

从“跳变”到“连续”:深入理解霍尔传感器插值与PLL角度估算的优劣与选择

本文深入解析霍尔传感器角度估算技术,对比线性插值法和锁相环(PLL)跟踪法的优劣,为电机控制领域的工程师提供实用指南。通过STM32F407和CubeMX的实例,详细探讨两种方法的实现细节、性能对比及优化策略,帮助在不同应用场景下做出最优选择。

weixin_30855761的博客 557

BMS短路测试避坑指南:从炸管到稳定,我是如何搞定MOS管和TVS的

本文详细记录了BMS短路测试中MOS管和TVS的优化过程,从驱动电阻调整、PCB寄生参数控制到TVS选配策略,提供了一套实用的调试方法论。通过实战案例解析,帮助工程师避免常见陷阱,实现稳定可靠的短路测试性能。

weixin_30652897的博客 140

残缺棋盘问题

文章目录实验目的实验内容算法分析实验步骤实验结果 实验目的 了解和运用递归与分治算法解决实际问题。 实验内容 残缺棋盘是一个有2k×2k(k≥1)个方格的棋盘,其中恰有一个方格残缺。如图给出k=1时各种可能的残缺棋盘,其中残缺的方格用阴影表示。残缺棋盘问题就是要用这四种三格板覆盖更大的残缺棋盘。在此覆盖中要求: 1)两个三格板不能重叠 2)三格板不能覆盖残缺方格,但必须覆盖其他所有的方格。 小格子...

小肥柴YD的博客 6270

TI DSP从COFF切换到EABI输出格式的5个关键修改点(TMS320F280025实测)

本文基于TMS320F280025实测,详细解析了TI DSP从COFF切换到EABI输出格式的5个关键修改点。核心差异在于EABI遵循ELF标准,涉及链接器优化、RAM数据共享、工具链升级、double数据类型位宽变化及链接器命令文件重构。迁移时需使用.retain指令防止关键数据被优化,利用NOINIT段保护共享RAM,并更新hex2000等工具,以确保BootLoader与应用程序稳定运行。

weixin_29189381的博客 266

棋盘问题c++

摘要: 本文探讨了在给定不规则棋盘上摆放k个棋子的方案数计算问题。棋子不可同行同列,且只能放在标记为‘#’的位置。采用回溯法逐行处理,选择有效列放置棋子,通过递归和状态回溯统计所有可行方案。C++实现中,使用二维数组存储棋盘,vector<bool>标记已占列,确保行列不重复且位置有效。对于每组测试数据(n≤8, k≤n),算法高效遍历可能解空间,最终输出满足条件的摆放方案数目。示例输入验证了算法的正确性,如2×2棋盘放1棋子的方案数为2,4×4棋盘放4棋子仅1种方案。

gyvfhv的博客 749

LIS2DH三轴加速度传感器原理图设计,已量产(加速度传感器)

最近在做一款可穿戴设备原型时,选了 LIS2DH 这款加速度计 —— 比起之前常用的 ADXL345,它在低功耗和稳定性上的优化刚好戳中了可穿戴设备 “续航 + 可靠” 的核心需求。下面结合这次画的原理图,聊聊这个小模块的硬件设计细节。

不脱发的程序猿 388

出现 Tomcat:HTTP状态 404 - 未找到解决方法(图文分析)

出现如下问题 HTTP状态 404 - 未找到 类型 状态报告 消息 请求的资源[/ajax_war_exploded/]不可用 描述 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。 Apache Tomcat/8.5.69 解决方法如下: 网上中的操作有步操作多数都误导 这个部署的环境目录上面是web.xml 下面的目录路径是web即可不用到webapp 保存重启服务器即可使用 其他配置中启动tomcat的操作具体 JRE 1.8 ...

码农研究僧的博客 13万+

棋盘问题 BNUOJ 1440

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

lvxin1204的博客 5293

VHDL语法学习笔记:一文掌握VHDL语法

今天给大侠带来FPGA 之 VHDL 语法学习笔记,话不多说,上货。 VHDL语法学习笔记 一、VHDL简介 1.1 VHDL 的历史 VHDL 的 英 文 全 名 是 Very-High-Speed Integrated Circuit Hardware DescriptionLanguage,诞生于 1982 年。 1987 年底,VHDL 被 IEEE 和美国国防部确认为标准硬件描述语言。自 IEEE 公布了 VHDL 的标准版本 IEEE-1076(简称 87 版)...

2万+

POJ 1321 棋盘问题

棋盘问题 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16573   Accepted: 8195 Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于

ACM2272902662的专栏 1860

rknn-toolkit推理yolov5-face.rknn模型--python代码

import os import urllib import traceback import time import sys import numpy as np import cv2 from rknn.api import RKNN ONNX_MODEL = 'yolov5s.onnx' RKNN_MODEL = 'yolov5s.rknn' IMG_PATH = './bus.jpg' DATASET = './dataset.txt' QUANTIZE_ON = True BOX_THR.

C/C++、嵌入式开发、深度学习算法、模型部署与推理优化 3079

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

棋盘麦粒问题编程python_棋盘麦粒问题

按照那位宰相所要求的方法,在64格棋盘上放置麦粒,表面上看起来所需麦粒数量很少,其实越放越多,最终达到一个天文数量.每格棋盘应该放置麦粒详细数量:第1格棋盘: 1=2的0次方第2格棋盘: 2=2的1次方第3格棋盘: 4=2的2次方∶第18格棋盘: 131072=2的17次方第19格棋盘: 262144=2的18次方第20格棋盘: 524288=2的19次方∶第43格棋盘: 439804651110...

weixin_39931101的博客 5050

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

POJ 1321 棋盘问题

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

dlj1713779797的博客 5102

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

棋盘问题(???)

棋盘问题 问题链接 http://poj.org/problem?id=1321 Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。 Input 输入含有多组测试数据。 每组数据的第一行是两个正整数,n k,用一个空格隔开,...

qq_43993717的博客 266

棋盘覆盖问题

¢在一个 2k×2k个方格组成的棋盘中,若恰有一个方格与其他方格不同,称该方格为特殊方格,且称该棋盘为特殊棋盘(Defective Chessboard)。 l特殊方格在棋盘中出现的位置有 4k种情形,就有4k种不同的棋盘。 ¢图中的特殊棋盘是当 k=2时16个特殊棋盘中一个。在棋盘覆盖问题中,要求用图所示的4种不同形状的L型骨牌覆盖给定棋盘上除特殊方格以外的所有方格,且任何两个L型骨牌不得重...

kt1776133839的博客 2703
上一篇: Dungeon Master
下一篇: New Year Permutation
Techay
博客等级 码龄11年 11粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值