(DFS)棋盘问题(poj1321)

题目:

在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放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<=n,我觉得这个和八皇后不同一点就是八皇后列从第一行一直找到最后第n行,但是这个可以在某一行不放棋子。于是我们dfs里面就要考虑写一个二重循环,行和列都要考虑到,我们假设固定行,就是说,每次行从第x行开始,就算回溯了,还可以从第x+i行继续调用,从而考虑到所有情况
由于是一行一行的调用,因此已经放置的棋子必然不再同一行,那现在就需要考虑怎么整一个条件能够去判断是不是在同一列,额当然了,用一个标记数组visit,如果如果标志数组visit[j]=0说明第j列没有用过,那我们就可以大胆的放到第j列了
dfs(x,y)的意思是在第x行准备放第y+1个棋子,额就是现在已经放了y个棋子了,我们固定了这第x行,从第一列开始找,我们放棋子的条件是!visit[j]&&mp[i][j]==’#’,找到一满足条件的列,我们就把棋子放这一列上,放完这一行的棋子,我们就继续递归找下一行,递归完了还要清除标志数组,因为除了在第x行的第j列放棋子,仍有可能在其他列仍然能放棋子。而dfs的返回条件就是现在放的棋子个数y已经等于k了,那就return了

代码参考:
https://www.cnblogs.com/ECJTUACM-873284962/p/6747947.html

#include<iostream>
#include <algorithm>
#include <stdio.h>
#include <string.h>
using namespace std;
int visit[20];
char mp[20][20];
int ans;
int k;
int n; 
int DFS(int x,int y)
{if(y==k){ans++;return 0;}for(int i=x;i<n;i++){for(int j=0;j<n;j++){if(!visit[j]&&mp[i][j]=='#'){visit[j]=true;DFS(i+1,y+1);visit[j]=false;}}}return 0;
}
int main()
{while(cin>>n>>k){if(n==-1&&k==-1)break;memset(visit,false,sizeof(visit));memset(mp,false,sizeof(mp));for(int i=0;i<n;i++)cin>>mp[i];ans=0;DFS(0,0);cout<<ans<<endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(BFS)Catch That Cow(poj3278)

题目&#xff1a; 农夫知道一头牛的位置&#xff0c;想要抓住它。农夫和牛都于数轴上 &#xff0c;农夫起始位于点 N(0<N<100000) &#xff0c;牛位于点 K(0<K<100000) 。农夫有两种移动方式&#xff1a; 1、从 X移动到 X-1或X1 &#xff0c;每次移动花费一分钟 2…

java jmx 监控_只用五分钟为系统实现基于JMX的监控

早期是作为J2EE的一部分, 因此总给人一种开发起来会很"重"的感觉, 这让不少Java程序员宁愿选择自行实现"轻量级"方案. 时至今日, 借助一些优秀的开源项目, JMX 也可以用起来很"轻".pojo-mbean 使用Annotation对MBean进行声明, 省去不少 JMX规范中…

(DFS or BFS)Find The Multiple(poj1426)

题目&#xff1a; 给定一个正整数n&#xff0c;请编写一个程序来寻找n的一个非零的倍数m&#xff0c;这个m应当在十进制表示时每一位上只包含0或者1。你可以假定n不大于200且m不多于100位。 提示&#xff1a;本题采用Special Judge&#xff0c;你无需输出所有符合条件的m&…

wsld2java axis_Weblogic+axis2安装

Weblogicaxis2安装实验环境系统版本使用到软件软件版本Redhat 6.3Ld-linux.so.2Ld-linux.so.2 安装的weblogic的需要安装(系统自带)Weblogic10.3Axis21.41在以下实验中我使用的是1.41的war包 &#xff0c;下载war包的话可以在weblogic中进行部署。实验步骤&#xff1a;启动webl…

java stl分解_[STL训练]寻梦-题解(Java代码)极简思路

注意事项: insert()方法只能被 StringBuffer 类的对象调用参考代码:import java.util.Scanner;public class Main {private static int n 0;public static void main(String[] args) {Scanner scanner new Scanner(System.in);n scanner.nextInt();int m n * 2;for (int i…

(BFS)Prime Path (poj3126)

题目&#xff1a; 孤单的zydsg又一次孤单的度过了520&#xff0c;不过下一次不会再这样了。zydsg要做些改变&#xff0c;他想去和素数小姐姐约会。 所有的路口都被标号为了一个4位素数&#xff0c;zydsg现在的位置和素数小姐姐的家也是这样&#xff0c;如果两个路口间只差1个数…

java图片资源存放_Java编程中图片文件放哪

举个例子&#xff1a;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;/*按扭类*/classBombextendsJButton{publicintnum_x,num_y;//第几号方块publicintBombRoundCount;//周围雷数...举个例子&#xff1a;import java.awt.*;import java.awt.event.*;import jav…

(BFS)Dungeon Master(poj2251)

题目&#xff1a; 你被困在一个3D地牢中且继续寻找最短路径逃生&#xff01;地牢由立方体单位构成&#xff0c;立方体中不定会充满岩石。向上下前后左右移动一个单位需要一分钟。你不能对角线移动并且迷宫四周坚石环绕。 是否存在逃出生天的可能性&#xff1f;如果存在&#…

java流读写_java流概述以及文件读写示例

1. 先分清楚是字节流还是字符流。字节流&#xff1a;InputStream OutputStream字符流&#xff1a;Reader Writer字符流与字节流的区别是读取的单位长度不同&#xff0c;字节流读8字节&#xff0c;字符流读16字节&#xff0c;所以有中文时&#xff0c;就得用字符流。2. 在字节/字…

(DFS+DP)滑雪(poj1088)

题目 Michael喜欢滑雪百这并不奇怪&#xff0c; 因为滑雪的确很刺激。可是为了获得速度&#xff0c;滑的区域必须向下倾斜&#xff0c;而且当你滑到坡底&#xff0c;你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数…

(BFS)Meteor Shower (poj3669)

题目&#xff1a; Bessie听说有场史无前例的流星雨即将来临&#xff1b;有谶言&#xff1a;陨星将落&#xff0c;徒留灰烬。为保生机&#xff0c;她誓将找寻安全之所&#xff08;永避星坠之地&#xff09;。目前她正在平面坐标系的原点放牧&#xff0c;打算在群星断其生路前转…

java的整型_java 整型

byte(1字节)、short(2字节)、int(4字节)、long(16字节)java中前缀加上0b或者0b就可以写二进制数&#xff0c;前缀加上0就可以写八进制数&#xff0c;前缀加上0x或者0x就可以写十六进制数一个字节是8位&#xff0c;最高位是符号位&#xff0c;最高位为0则是正数。最高位为1则是负…

(二分+区间搜索 )Mountain Walking(poj2110/poj2922)

题目 农夫约翰和贝西牛已经开始了其中一个“积极”的假期。他们整天都在山里散步&#xff0c;然后在一天结束时&#xff0c;他们厌倦了回到度假小屋。 由于攀爬需要大量能量并且已经疲惫&#xff0c;他们希望使用其最高和最低高度之间的差异最小的路径返回到机舱&#xff0c;…

python自动化操作应用程序错误_web自动化中踩过的低级错误坑(python+selenium)

1.定位了元素没有做下一步操作&#xff0c;比如&#xff0c;点击、输入等功能&#xff0c;而报错&#xff0c;报错信息如下&#xff1a;2.上传图片时&#xff0c;定位元素&#xff0c;应该定位input标签&#xff0c;点击页面input标签肉眼没有看到定位到任何元素&#xff0c;以…

(全排列)Smallest Difference (poj2718)

题目&#xff1a; Description - 题目描述 给定若干位十进制数&#xff0c;你可以通过选择一个非空子集并以某种顺序构建一个数。剩余元素可以用相同规则构建第二个数。除非构造的数恰好为0&#xff0c;否则不能以0打头。 举例来说&#xff0c;给定数字0&#xff0c;1&#x…

qgis折点打断_arcgis在折点处打断并建立网络分析(最短路径等问题)

目的&#xff1a;GIS网络分析用于对段路径等问题。这里仅仅讲述如何建立网络分析。网络建立前必须满足以下条件1.要素文件在节点处打断(本文下面会叙述)2.要素文件在地理数据库里的数据集里(一般是这样)3.要素文件包含的数据集里已经验证拓扑&#xff0c;并确保没有错误(可选)注…

(bfs)连连看(hdu1175)

题目&#xff1a; “连连看”相信很多人都玩过。没玩过也没关系&#xff0c;下面我给大家介绍一下游戏规则&#xff1a;在一个棋盘中&#xff0c;放了很多的棋子。如果某两个相同的棋子&#xff0c;可以通过一条线连起来&#xff08;这条线不能经过其它棋子&#xff09;&#…

base64 java php_利用PHP将图片转换成base64编码的实现方法

先来说一下为什么我们要对图片base64编码base64是当前网络上最为常见的传输8Bit字节代码的编码方式其中之一。base64主要不是加密&#xff0c;它主要的用途是把某些二进制数转成普通字符用于网络传输。由于这些二进制字符在传输协议中属于控制字符&#xff0c;不能直接传送&…

(BFS)Knight Moves(hdu1372)

题目&#xff1a; 在象棋王国&#xff0c;尼古拉斯.火山是一匹英俊的马&#xff0c;他非常幸运迎娶了白马王国的公主&#xff0c;他们将度蜜月&#xff0c;你现在是他们的女仆&#xff0c;火山会问你去一些地方最少需要多少步&#xff0c;这么简单的事当然难不倒你。由于火山是…

java上机作业要注意什么_Java第八次上机作业

1、请按照以下要求设计一个学生类Student&#xff0c;并进行测试。要求如下&#xff1a;1)Student类中包含姓名、成绩两个属性2)分别给这两个属性定义两个方法&#xff0c;一个方法用于设置值&#xff0c;另一个方法用于获取值.3)Student类中定义一个无参的构造方法和一个接收两…