POJ1321(深搜)
在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。 Input
每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n
当为-1 -1时表示输入结束。
随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白区域(数据保证不出现多余的空白行或者空白列)。
Output
Sample Input
2 1 #. .# 4 4 ...# ..#. .#.. #... -1 -1
Sample Output
2 1
#include<stdio.h>
#include<string.h>
int used[9][9],n,number,k,colvis[9];//colvis用于放置棋子的列标记
char qian[10][10];
void dfs(int row,int num)
{int j;if(num==k)//当一种方式搜完后,方式加1{number++;return;}if(row>n)return;//当列数超过时深搜结束for(j=1;j<=n;j++){if(used[row][j]&&!colvis[j]){colvis[j]=1;dfs(row+1,num+1);colvis[j]=0;//回溯后,重新标记为未使用状态}}dfs(row+1,num);return;
}
int main()
{int i,j;while(scanf("%d%d",&n,&k)!=EOF){getchar();if(n==-1&&k==-1)break;number=0;memset(colvis,0,sizeof(colvis));memset(used,0,sizeof(used));for(i=1;i<=n;i++)gets(qian[i]);for(i=1;i<=n;i++)for(j=0;j<n;j++){if(qian[i][j]=='#')used[i][j+1]=1;}dfs(1,0);printf("%d\n",number);}return 0;
}
POJ1321(深搜)相关推荐
- Go 分布式学习利器(15) -- Go 实现 深搜和广搜
强化语法,回顾算法. 通过Go语言实现 深度优先搜索 和 广度优先搜索,来查找社交网络中的三度好友关系(三度指的是一个节点到 其相邻节点 到 其相邻节点的节点 ,图递增三层好友关系). 涉及到的Go语 ...
- 水管工游戏 (深搜)
水管工游戏 本题依然是采用搜索,深搜,广搜都可以,本代码采用深搜,此题在搜索时需要增加一些判断条件以及下一步要搜索的位置即可. 代码如下: #include<stdio.h> int a[ ...
- Poj(2488),按照字典序深搜
题目链接:http://poj.org/problem?id=2488 思路:按照一定的字典序深搜,当时我的想法是把所有的可行的路径都找出来,然后字典序排序. 后来,凡哥说可以在搜索路径的时候就按照字 ...
- [数据结构] 迷宫问题(栈和队列,深搜和广搜)
代码: #include <iostream> #include <string.h> #include <stack> #include <queue> ...
- 迷宫问题最短捷径c语言深搜,迷宫问题 C语言实现(深搜)
问题描述: 2015年05月21日 10:24:05 这是我自己出的一道题 其原型基于迷宫问题,用深搜来解决的!我就简单的说一说吧! 给定一个N * M 的迷宫!,1代表有障碍,0代表无障碍可通行 ...
- POJ-1724 深搜剪枝
这道题目如果数据很小的话.我们通过这个dfs就可以完成深搜: void dfs(int s) {if (s==N){minLen=min(minLen,totalLen);return ;}for ( ...
- POJ2044 深搜+剪枝(云彩下雨)
题意: 有一个城镇,是4*4的大小的,然后你控制一块云彩,2*2的,你每天可以有9种走的方法,上下左右,或者不动,走的时候可以走1或者2步,云彩所在的地方肯定会下雨,然后给你做多365天 ...
- hdu4876 深搜+(随机枚举剪枝)
题意: 给你n个数,让你从选择k个数,然后排成一个环(k个数的顺序随意,但是排成一个环后就不能变了),然后可以在这个环上任意的找连续w个数(w<=k),可以找多次,得到一个值等于当前 ...
- 单词拼接 ----- 深搜
先判断这些单词能不能构成 接龙 , 能的话在排序 , 然后深搜确定接龙 . 题解 : 如果先确定所有单词的首尾字母的个数 , 如果首字母个数等于尾字母个数就不用管了 , 如果发现首字母比尾字母大1那个 ...
最新文章
- DDD领域驱动设计之聚合、实体、值对象
- C8-1 复数加减乘除 (100/100 分数)
- mysql第一二章笔记_MYSQL必知必会读书笔记 第一章(基础)
- 年前最后一波成绩单,请查收!
- ScrollView与TableView实现选择效果
- 一道简单的编程题,不过您做对了吗?
- wuzhicms刷新按钮的功能开发
- 关于文件中的0D、0A
- 每天工作4小时的程序员_IT新闻_博客园
- CC1101接口库在STM32上的移植
- 华为员工离职心声:菊厂15年退休,感恩,让我实现了财务自由!
- 有心杀贼,无力回天出处
- 基于django的个人博客开发
- mata name,property=og:title|og:image的几种说明
- 如何看linux系统中有没有安装cuda,Linux系统CUDA10.2+CUDNN安装教程
- CCG7D双C口车用充电芯片
- 经典算法-递归-角谷定理
- Java——检索一段话中出现次数最多的英文单词
- Failed to shutdown database console gracefully
- 光立方原理讲解_电工基础知识——光电耦合器的分类、工作原理和检测以及应用...