问题描述:

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
#include"cstdio"
#include"queue"
using namespace std;
const int MAXN=;
typedef pair<int,int> P;
P vec[MAXN];
int cnt;
char map[MAXN][MAXN];
int n,k;
int visr[MAXN];
int visc[MAXN];
int ans;
void dfs(int i,int j)
{
if(j==k)
{
ans++;
return ;
}
if(i==cnt) return ; P no=vec[i];
if(!visr[no.first]&&!visc[no.second])
{
visr[no.first]=;
visc[no.second]=;
dfs(i+,j+);
visr[no.first]=;
visc[no.second]=;
dfs(i+,j);
}
else dfs(i+,j);
}
int main()
{
while(scanf("%d%d",&n,&k)!=EOF&&n!=-&k!=-)
{
cnt=;
scanf("%*c");
for(int i=;i<n;i++)
{
for(int j=;j<n;j++)
{
scanf("%c",&map[i][j]);
if(map[i][j]=='#')
{
vec[cnt++]=P(i,j);
}
}
scanf("%*c");
}
ans=;
dfs(,);
printf("%d\n",ans);
} return ;
}

清晰思路2:

#include"cstdio"
using namespace std;
char map[][];
int n,k;
int ans;
int vis[];
void dfs(int i,int j)
{
if(j==k)
{
ans++;
return;
}
if(i==n) return ;
dfs(i+,j);
for(int x=;x<n;x++)
{
if(map[i][x]=='#'&&!vis[x])
{
vis[x]=;
dfs(i+,j+);
vis[x]=;
}
}
}
int main()
{
while(scanf("%d%d",&n,&k)!=EOF&&n!=-)
{
ans=;
for(int i=;i<n;i++)
scanf("%s",map[i]); //新地图输入方式
dfs(,);
printf("%d\n",ans);
}
return ;
}

virtual judge(专题一 简单搜索 A)的更多相关文章

  1. virtual judge(专题一 简单搜索 E)

    Description Given a positive integer n, write a program to find out a nonzero multiple m of n whose ...

  2. virtual judge(专题一 简单搜索 C)

    Description Farmer John has been informed of the location of a fugitive cow and wants to catch her i ...

  3. virtual judge(专题一 简单搜索 B)

    Description You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is co ...

  4. [kuangbin带你飞]专题一 简单搜索 题解报告

    又重头开始刷kuangbin,有些题用了和以前不一样的思路解决.全部题解如下 点击每道题的标题即可跳转至VJ题目页面. A-棋盘问题 棋子不能摆在相同行和相同列,所以我们可以依此枚举每一行,然后标记每 ...

  5. [kuangbin带你飞]专题一 简单搜索(回顾)

    A - 棋盘问题 POJ - 1321 注意条件:不能每放一个棋子,就标记一行和一列,我们直接枚举每一行就可以了. AC代码: #include<iostream> #include< ...

  6. kuangbin专题 专题一 简单搜索 Oil Deposits HDU - 1241

    题目链接:https://vjudge.net/problem/HDU-1241 题意:问有几个油田,一个油田由相邻的‘@’,组成. 思路:bfs,dfs都可以,只需要遍历地图,遇到‘@’,跑一遍搜索 ...

  7. kuangbin专题 专题一 简单搜索 迷宫问题 POJ - 3984

    题目链接:https://vjudge.net/problem/POJ-3984 这个题目,emm,上代码,看的估计应该是刚开始接触搜索的,我带点注释,你能慢慢理解. #include <ios ...

  8. kuangbin专题 专题一 简单搜索 Fire! UVA - 11624

    题目链接:https://vjudge.net/problem/UVA-11624 题意:一个迷宫,可能有一个或者多个地方着火了,每过1个时间消耗,火会向四周蔓延,问Joe能不能逃出迷宫,只要走出迷宫 ...

  9. kuangbin专题 专题一 简单搜索 Fliptile POJ - 3279

    题目链接:https://vjudge.net/problem/POJ-3279 题意:格子有两面,1表示黑色格子,0表示白色格子,奶牛每次可以踩一个格子,踩到的格子和它周围的上下左右格子都会翻面,也 ...

随机推荐

  1. swift 一句代码补全tableView分割线

    1.swift实现分割线补全 swift一个大进步,只要设置tableView.separatorInset = UIEdgeInsets.zero即可补全分割线, 2.OC实现分割线补全 而在OC中 ...

  2. react create app ,nginx服务器配置

    server{ listen 80; server_name www.domain.com domain.com; location ~* \.js$ { root /home/hard/Projec ...

  3. Excel 文件下载

    INCLUDE OLE2INCL * ALV输出   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'     EXPORTING       I_CALLBACK_PRO ...

  4. python3 批量缩放图片为iphone5的640*1136以下

    try: from PIL import Image, ImageDraw, ImageFont, ImageEnhance except ImportError: import Image, Ima ...

  5. Thread.currentThread().getContextClassLoader() and Class.getClassLoader()

    Thread.currentThread().getContextClassLoader() and Class.getClassLoader()   一.同一工程中: String path = T ...

  6. CSS3垂直图标菜单

    在线演示 本地下载

  7. keep-alive使用笔记

    vue2.0提供了keep-alive组件,用来缓存组件,避免多次加载,减少性能消耗. 1.将整个网页缓存起来 <router-view class="view" keep- ...

  8. linux限制用户内存使用

    最近有内存使用报警的邮件发出,之后杀掉了内存占用高的进程,使内存恢复正常 但是发现某些程序被杀掉了,有过怀疑是被人手动杀掉的,看日志后发现应该是内存占用过大,系统自动杀掉的 内存耗尽会调用oom 对进 ...

  9. 阻挡ddos攻击的函数

  10. 如何搭建一个GitHub在自己的服务器上?

    摘自:http://blog.csdn.net/yangzhenping/article/details/43937595