信息学奥赛一本通(1217:棋盘问题)
1217:棋盘问题
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 10844 通过数: 5141
【题目描述】
在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放 k 个棋子的所有可行的摆放方案 C。
【输入】
输入含有多组测试数据。
每组数据的第一行是两个正整数n,k,用一个空格隔开,表示了将在一个n×n的矩阵内描述棋盘,以及摆放棋子的数目。 (n≤8,k≤n)
当为−1−1时表示输入结束。
随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域,. 表示空白区域(数据保证不出现多余的空白行或者空白列)。
【输出】
对于每一组数据,给出一行输出,输出摆放的方案数目C(数据保证C<2^31)。
【输入样例】
2 1
#.
.#
4 4
...#
..#.
.#..
#...
-1 -1
【输出样例】
2
1
【分析】
本题和八皇后问题类似,以样例1为例,棋盘n=2,k=1,在2*2的矩阵中,放1枚棋子的方案数,其中,#为棋盘区域,可以放置,.为空白区域,不能放置,假设放置为@,可行方案1为:
@ .
. #
可行方案2为:
# .
. @
【参考代码】
#include <stdio.h>
#include <string.h>
#define N 10char maps[N][N]; //棋盘
int vis[N]; //访问数组
int n; //棋盘规模
int k; //k个棋子
int cnt; //可行方案数void dfs(int x,int y)
{int i,j;if(y==k){cnt++;return;}for(i=x;i<=n;i++) //x前面的行不用考虑 for(j=1;j<=n;j++)if(maps[i][j]=='#' && !vis[j]) //列判断 {vis[j]=1;dfs(i+1,y+1);vis[j]=0;}return;
}
int main()
{int i,j;while(scanf("%d%d",&n,&k) && n!=-1 || k!=-1){getchar();memset(vis,0,sizeof(vis));for(i=1;i<=n;i++){for(j=1;j<=n;j++)scanf("%c",&maps[i][j]);getchar();} cnt=0;dfs(1,0);printf("%d\n",cnt);}return 0;
}
http://ybt.ssoier.cn:8088/problem_show.php?pid=1217
信息学奥赛一本通(1217:棋盘问题)相关推荐
- 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)
信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法 更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...
- Knight Moves(信息学奥赛一本通-T1450)
[题目描述] 编写一个程序,计算一个骑士从棋盘上的一个格子到另一个格子所需的最小步数.骑士一步可以移动到的位置由下图给出. [输入] 第一行给出骑士的数量 n. 在接下来的 3n 行中,每 3 行描述 ...
- 信息学奥赛一本通C++语言-----1120:同行列对角线的格
[题目描述] 输入三个自然数nn,ii,j(1≤i≤n,1≤j≤n)j(1≤i≤n,1≤j≤n),输出在一个n×nn×n格的棋盘中(行列均从11开始编号),与格子(ii,jj)同行.同列.同一对角线的 ...
- 信息学奥赛一本通T1451:棋盘游戏
信息学奥赛一本通T1451:棋盘游戏 [题目描述] 在一个 4×4 的棋盘上有 8 个黑棋和 8 个白棋,当且仅当两个格子有公共边,这两个格子上的棋是相邻的.移动棋子的规则是交换相邻两个棋子. 给出一 ...
- 信息学奥赛一本通:1219.马走日
信息学奥赛一本通:1219.马走日 1219:马走日 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 7406 通过数: 3863 [题目描述] 马在中国象棋以日字形规则移动. 请 ...
- 信息学奥赛一本通 (C++)上机练习
信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...
- 信息学奥赛一本通_长乐一中老师演绎“奥赛传奇”
董永建(右一)在课堂上. 台海网5月14日讯 据福州晚报报道,长乐一中有一位"传奇"老师--15年来,他辅导的学生在全国高中生信息学奥赛中获金牌3人次.银牌3人次.铜牌5人次:在全 ...
- 信息学奥赛一本通 提高篇 第5章 矩阵乘法
例1 矩阵AXB 信息学奥赛一本通(C++版)在线评测系统 [矩阵乘法]矩阵A×B_Uletay-CSDN博客 矩阵乘法--矩阵A×B_vina的博客-CSDN博客 一本通1641[例 1]矩阵 A× ...
- 《信息学奥赛一本通提高篇》第6章 组合数学
例1 计算系数(NOIP2011提高) 信息学奥赛一本通(C++版)在线评测系统 NOIP2011计算系数_nanhan27的博客-CSDN博客 「NOIP2011」 计算系数 - 组合数_TbYan ...
- 《信息学奥赛一本通 提高篇》
提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1章 贪心算法_青少年趣味编程-CSDN博客 提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1 ...
最新文章
- Android 自定义Dialog 的使用
- 公钥与私钥,HTTPS详解
- 面试的算法2(C语言)(整理)
- Catch a cold, will be back later
- SpringMVC学习笔记七:SpringMVC的数据验证
- Android视频: YUV转RGB
- kafka最好用的脚本一:kafka-topic
- redis批量删除指定的key
- machine learning (7)---normal equation相对于gradient descent而言求解linear regression问题的另一种方式...
- 智能化施工(综合管线)
- 手机1像素线粗_移动端1像素边框问题
- matlab sor解线性方程组,解线性方程组的SOR迭代法及其MATLAB实现.pdf
- goto解密PHP源码解密程序源码下载
- 使用sql服务器发送贺卡_发送免费电子贺卡的最佳网站
- 关于bootstrapValidator 表单校验remote出现两次重复提交才能验证通过问题处理
- 《生物信息学:导论与方法》--本体论、分子通路鉴定--听课笔记(十八)
- 猿辅导2017 笔试题
- 重邮计算机学院新闻,感知重邮丨重庆邮电大学计算机学院稳固学科建设核心 提升人才培养质量...
- 把梳子卖给和尚的故事(网络营销策略,精彩案例分析)
- 【Java】全栈工程师