virtual judge(专题一 简单搜索 A)
问题描述:
Description
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"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)的更多相关文章
- virtual judge(专题一 简单搜索 E)
Description Given a positive integer n, write a program to find out a nonzero multiple m of n whose ...
- virtual judge(专题一 简单搜索 C)
Description Farmer John has been informed of the location of a fugitive cow and wants to catch her i ...
- virtual judge(专题一 简单搜索 B)
Description You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is co ...
- [kuangbin带你飞]专题一 简单搜索 题解报告
又重头开始刷kuangbin,有些题用了和以前不一样的思路解决.全部题解如下 点击每道题的标题即可跳转至VJ题目页面. A-棋盘问题 棋子不能摆在相同行和相同列,所以我们可以依此枚举每一行,然后标记每 ...
- [kuangbin带你飞]专题一 简单搜索(回顾)
A - 棋盘问题 POJ - 1321 注意条件:不能每放一个棋子,就标记一行和一列,我们直接枚举每一行就可以了. AC代码: #include<iostream> #include< ...
- kuangbin专题 专题一 简单搜索 Oil Deposits HDU - 1241
题目链接:https://vjudge.net/problem/HDU-1241 题意:问有几个油田,一个油田由相邻的‘@’,组成. 思路:bfs,dfs都可以,只需要遍历地图,遇到‘@’,跑一遍搜索 ...
- kuangbin专题 专题一 简单搜索 迷宫问题 POJ - 3984
题目链接:https://vjudge.net/problem/POJ-3984 这个题目,emm,上代码,看的估计应该是刚开始接触搜索的,我带点注释,你能慢慢理解. #include <ios ...
- kuangbin专题 专题一 简单搜索 Fire! UVA - 11624
题目链接:https://vjudge.net/problem/UVA-11624 题意:一个迷宫,可能有一个或者多个地方着火了,每过1个时间消耗,火会向四周蔓延,问Joe能不能逃出迷宫,只要走出迷宫 ...
- kuangbin专题 专题一 简单搜索 Fliptile POJ - 3279
题目链接:https://vjudge.net/problem/POJ-3279 题意:格子有两面,1表示黑色格子,0表示白色格子,奶牛每次可以踩一个格子,踩到的格子和它周围的上下左右格子都会翻面,也 ...
随机推荐
- images have the “stationarity” property, which implies that features that are useful in one region are also likely to be useful for other regions.
Convolutional networks may include local or global pooling layers[clarification needed], which combi ...
- 【python】-- 函数、无参/有参参数、全局变量/局部变量
函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创建函 ...
- [ACM] FZU 2087 统计数边 (有多少边至少存在一个最小生成树里面)
Problem Description 在图论中,树:随意两个顶点间有且仅仅有一条路径的图. 生成树:包括了图中全部顶点的一种树. 最小生成树:对于连通的带权图(连通网)G,其生成树也是带权的. 生成 ...
- linux c编程:Posix消息队列
Posix消息队列可以认为是一个消息链表. 有足够写权限的线程可以往队列中放置消息, 有足够读权限的线程可以从队列中取走消息 在某个进程往一个队列写入消息前, 并不需要另外某个进程在该队列上等待消息的 ...
- 【Android】开源项目汇总
Android开源项目第一篇——个性化控件(View)篇 包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.Progres ...
- https 请求发送 例子 tls && ssl
package com.dooioo.training.helper; import java.io.IOException; import java.io.UnsupportedEncodingEx ...
- ubuntu下使用free命令查看内存实际占用(待补充)
free不带选项运行会显示一个以kb为单位的默认输出 free -h人类能看懂的方式显示 free -m MB的方式显示 free -g GB方式显示 used=total-free即total=us ...
- Ionic background地址写法问题
1.背景图片 background:url(‘/img/text.jpg') 这种写法在手机上不好使 ’../img/text.jpg' 这种在手机上好使
- 自定义xhr请求
接上一篇博客,上一篇是之前的jsonp请求方法的封装,这一篇是xhr请求的简单封装. 原理: 1:new一个xhr对象,命名为ajaxRequest,由于浏览器兼容性的问题,所以将获取xhr对象的方式 ...
- 【leetcode刷题笔记】Triangle
Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent n ...