剪邮票

如【图1.jpg】, 有12张连在一起的12生肖的邮票。
现在你要从中剪下5张来,要求必须是连着的。
(仅仅连接一个角不算相连)
比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。

请你计算,一共有多少种不同的剪取方法。

题解:用for循环把1~12每一个点作为搜索起点去dfs次,已经作为搜索起点的点不能再被dfs过程中枚举

所得的最后结果再加2

为什么要加2
因为我这里搜索的是由起点不断外延伸的,所以cnt只包含了线性连通的情况
这里还有两种放射状连通的情况

答案:116

#include<iostream>
#include<string.h>
using namespace std;
int a[][],star[],vis[][],dir[][]={{,},{-,},{,},{,-}};
int cnt=;
int check(int x,int y)
{
if(x>=&&x<&&y>=&&y<)
return ;
else
return ;
}
void dfs(int x,int y,int dep)
{
if(dep==)
{
cnt++;
return;
}
else
{
for(int i=;i<;i++)
{
int tx,ty;
tx=x+dir[i][];
ty=y+dir[i][];
if(check(tx,ty)&&!vis[tx][ty]&&!star[a[tx][ty]])//在棋盘内/可以剪/这个点没有作为搜索起点使用过
{
vis[tx][ty]=;
dfs(tx,ty,dep+);
vis[tx][ty]=;
} }
} }
int main()
{
int n=;
for(int i=;i<;i++)
{
for(int j=;j<;j++)
a[i][j]=n++;
}
for(int i=;i<;i++)
{
for(int j=;j<;j++)
{
dfs(i,j,);
star[a[i][j]]=;//标记搜索起点,避免重复
}
}
cout<<cnt+<<endl;//为什么要加2?
//因为我这里搜索的是由起点不断外延伸的,所以cnt只包含了线性连通的情况
//这里还有两种放射状连通的情况
}

剪邮票--蓝桥杯--dfs--思路超清晰的更多相关文章

  1. 方格填数--蓝桥杯---dfs

    答案:1580 相似题目:N皇后问题 注意要枚举的是什么 #include<iostream> #include<string.h> using namespace std; ...

  2. 蓝桥杯dfs搜索专题

    2018激光样式 #include<bits/stdc++.h> using namespace std; /* dfs(i) 第i个激光机器 有两种选择:vis[i-1] == 0 时 ...

  3. 寒假作业---蓝桥杯---DFS

    题目描述 现在小学的数学题目也不是那么好玩的. 看看这个寒假作业: 每个方块代表1~13中的某一个数字,但不能重复. 比如: 6  + 7 = 13 9  - 8 = 1 3  * 4 = 12 10 ...

  4. 穿越雷区--蓝桥杯--DFS/BFS

    题目描述 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废. 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短? ...

  5. 四阶幻方-蓝桥杯-DFS

    答案:416 用next_permutation()全部排列的话会超时 所以用dfs搜索,只搜索前三行就好,前三行确定之后,第四行也就确定 #include<iostream> #incl ...

  6. 蓝桥杯 剪邮票 全排列+DFS

    剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2.jpg],[图3.jpg]中,粉红色所示部分就是 ...

  7. 蓝桥杯 剪邮票(dfs枚举 + bfs)

    剪邮票 如图1, 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连)比如,图2,图3中,粉红色所示部分就是合格的剪取. 请你计算,一共有多少种不同的 ...

  8. 蓝桥杯 剪邮票 DFS (不错的题目)

    剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连)比如,[图2.jpg],[图3.jpg]中,粉红色所示部分就是合格的 ...

  9. 蓝桥杯 历届试题 剪格子(dfs搜索)

    历届试题 剪格子 时间限制:1.0s   内存限制:256.0MB 问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |* || +--****--+ ||* | ** ...

随机推荐

  1. swift基本运算

    swift运算有单目运算,双目运算和三元运算 1:赋值操作 iX = iY//iX is 8 元组赋值 let (iX, iY = (, ) // iX is 8, iY is 7 和c语言不同的是, ...

  2. C# 用代码返回上一页

    若我们在后台.cs文件中想做到让浏览器返回上一页,我们可以在.cs代码中这样写 Page.ClientScript.RegisterStartupScript(Page.GetType(), &quo ...

  3. [GO]new函数的使用

    new函数的作用其实就是动态分配一个空间,我们只需要进行使用,不需要考虑它的内存释放的它的生命周期 package main import "fmt" func main() { ...

  4. C#中特殊的string类型

                                                                                  string C#有string关键字,在翻 ...

  5. 【2008nmj】BP二元分类

    在人的大脑里有数以万计的神经元,它们之间通过神经突触来连接.用以判断. BP神经网络 MATLAB实现:

  6. Eclipse平台下配置Go语言开发环境(Win7)

    <Go语言编程>中写到:“从功能和易用性等方面考虑, Eclipse+GoEclipse.LiteIDE这两个环境在所有IDE里面是表现最好的”,所以笔者打算采用Eclipse+GoEcl ...

  7. DataTable中的select()用法

    1.在DataTable中执行DataTable.Select("条件")返回DataTable // <summary> // 执行DataTable中的查询返回新的 ...

  8. Dos命令 WIN10 WIFI命令

    设置WIFI命令: netsh wlan set hostednetwork ssid=T key=123456798 mode=allow netsh wlan start hostednetwor ...

  9. IPython绘图和可视化---matplotlib 入门

    最近总是需要用matplotlib绘制一些图,由于是新手,所以总是需要去翻书来找怎么用,即使刚用过的,也总是忘.所以,想写一个入门的教程,一方面帮助我自己熟悉这些函数,另一方面有比我还小白的新手可以借 ...

  10. 扩展jQuery---选中指定索引的文本

    <script type="text/javascript"> //1.扩展jQuery $.fn.selectRange = function (start, end ...