滑动解锁是智能手机一项常用的功能。你需要在3x3的点阵上,从任意一个点开始,反复移动到一个尚未经过的”相邻”的点。这些划过的点所组成的有向折线,如果与预设的折线在图案、方向上都一致,那么手机将解锁。

所谓两个点“相邻”:当且仅当以这两个点为端点的线段上不存在尚未经过的点。

此外,许多手机都约定:这条折线还需要至少经过4个点。

为了描述方便,我们给这9个点从上到下、从左到右依次编号1-9。即如下排列:

1 2 3
4 5 6
7 8 9

那么1->2->3是非法的,因为长度不足。
1->3->2->4也是非法的,因为1->3穿过了尚未经过的点2。
2->4->1->3->6是合法的,因为1->3时点2已经被划过了。

某大神已经算出:一共有389112种不同的解锁方案。没有任何线索时,要想暴力解锁确实很难。
不过小Hi很好奇,他希望知道,当已经瞥视到一部分折线的情况下,有多少种不同的方案。
遗憾的是,小Hi看到的部分折线既不一定是连续的,也不知道方向。

例如看到1-2-3和4-5-6,
那么1->2->3->4->5->6,1->2->3->6->5->4, 3->2->1->6->5->4->8->9等都是可能的方案。

你的任务是编写程序,根据已经瞥到的零碎线段,求可能解锁方案的数目。

输入:
每个测试数据第一行是一个整数N(0 <= N <= 8),代表小Hi看到的折线段数目。
以下N行每行包含两个整数 X 和 Y (1 <= X, Y <= 9),代表小Hi看到点X和点Y是直接相连的。

输出:
对于每组数据输出合法的解锁方案数目。

例如:
输入:
8
1 2 2 3
3 4 4 5
5 6 6 7
7 8 8 9

程序应该输出:
2

再例如:
输入:
4
2 4
2 5
8 5
8 6

程序应该输出:

258

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;const int maxn=10;
/*
这道题我的思路是把所有联通的线都连好,找到起点和终点,然后再来一个全排列,
每次只需要检查两个相邻的线的尾可不可以和下一条线的头部相连就好了,
但是存在一个问题,就是这条线他不一定是按照你的意愿所排列的,只能是一条单向边,
可是就会忽略反着的情况,这就很尴尬,导致我们的全排列就很难受我们可能直接去筛选符合条件的情况然后往下走,可能有点问题,但是我们可以先
暴力出来一个答案,然后我们去检测,他是不是符合我们的条件,
不一定非要找到满足条件的,我们才往下走,我们也是可以先走一步,
然后再去检测,虽然比较浪费,但是思路还是比较好想的
*/
int in_mid[10][10],vis[10];
int path[10],is_ok[10][10];
int ans,m;
void dfs(int now){if(now>=5){int tmp=0;for(int i=now-1;i>1;i--){if(is_ok[path[i]][path[i-1]]) tmp++;}if(tmp>=m) ans++;}for(int i=1;i<=9;i++){int tmp=in_mid[i][path[now-1]];if(!vis[tmp]||vis[i]) continue;vis[i]=1;path[now]=i;dfs(now+1);vis[i]=0;}
}int main(){in_mid[1][3]=in_mid[3][1]=2;in_mid[4][6]=in_mid[6][4]=5;in_mid[7][9]=in_mid[9][7]=8;in_mid[1][7]=in_mid[7][1]=4;in_mid[2][8]=in_mid[8][2]=5;in_mid[3][9]=in_mid[9][3]=6;in_mid[1][9]=in_mid[9][1]=5;in_mid[3][7]=in_mid[7][3]=5;vis[0]=1;scanf("%d",&m);for(int i=1;i<=m;i++){int u,v;scanf("%d %d",&u,&v);is_ok[u][v]=is_ok[v][u]=1;}    ans=0;dfs(1);printf("%d\n",ans);return 0;
}

一共可以形成多少中锁屏方案

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;const int maxn=10;
int in_mid[maxn][maxn];
int ans;
int path[maxn],vis[maxn];
/*
思路还是比较巧妙地,把不可能的情况列出来
也就是横向,纵向,斜向,这几种情况连续相连的情况
所以当我们检测的时候,只需要考虑[pre_choice][now_choice]
那么这个now_choice到底该不该选呢,就只需要考虑
我们是不是访问过他俩之间的这个非法访问点,只要访问过的话,
就没有什么问题了,很巧妙的思想,将复杂的问题简化了很多
*/
void dfs(int now){if(now>=5)//说明长度已经大于4了 ans++;for(int i=1;i<=9;i++){int tmp=in_mid[path[now-1]][i];if(!vis[tmp]||vis[i]) continue;path[now]=i;vis[i]=1;dfs(now+1);vis[i]=0;}
}int main(){memset(in_mid,0,sizeof(in_mid));in_mid[1][3]=in_mid[3][1]=2;in_mid[4][6]=in_mid[6][4]=5;in_mid[7][9]=in_mid[9][7]=8;in_mid[1][7]=in_mid[7][1]=4;in_mid[2][8]=in_mid[8][2]=5;in_mid[3][9]=in_mid[9][3]=6;in_mid[1][9]=in_mid[9][1]=5;in_mid[3][7]=in_mid[7][3]=5;ans=0;vis[0]=1;//把两个点之间相当于是添加了一个虚无的点 dfs(1);printf("%d\n",ans); return 0;
}

题目:滑动解锁 蓝桥杯相关推荐

  1. java比赛题目_【蓝桥杯2016第七届比赛题目】JAVA A组

    1 煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), .... 如果一共有100层,共有多少个煤 ...

  2. c语言 题目 猜算式,蓝桥杯竞赛题目(猜算式)

    看下面的算式: □□ x □□ = □□ x □□□ 它表示:两个两位数相乘等于一个两位数乘以一个三位数. 如果没有限定条件,这样的例子很多. 但目前的限定是:这9个方块,表示1~9的9个数字,不包含 ...

  3. 第十一届蓝桥杯大赛软件类B组省赛题目(2020蓝桥杯)

  4. c语言中穷竭算法,hihocoder#1054 : 滑动解锁(深度优先搜索)

    描述 滑动解锁是智能手机一项常用的功能.你需要在3x3的点阵上,从任意一个点开始,反复移动到一个尚未经过的"相邻"的点.这些划过的点所组成的有向折线,如果与预设的折线在图案.方向上 ...

  5. P8685 [蓝桥杯 2019 省 A] 外卖店优先级

    题目链接:[蓝桥杯 2019 省 A] 外卖店优先级 - 洛谷 标签:模拟 思路: 思路同领接表,开一个head数组存储上一次外卖店 i 接到订单的时间. 每次处理订单消息时,先计算这天的前一天他的优 ...

  6. 蓝桥杯 青少年创意编程大赛 scratch组 (二)

    蓝桥杯scratch编程题 蓝桥杯scratch编程题_哔哩哔哩_bilibili [难度:3]2021年3月蓝桥杯Scratch:瞄准镜 [难度:3]2021年3月蓝桥杯Scratch:瞄准镜_哔哩 ...

  7. HAUT2021蓝桥杯专题练习第四周记录——贪心

    HAUT2021蓝桥杯专题练习第四周记录--贪心 贪心好难啊,证明啥都不会,全程膜拜大佬555 经过这次的练习也学到了很多吧,起码一些基础的贪心就知道了,但是吧,就这周说明白了是贪心还做不出来,更别说 ...

  8. 【蓝桥杯程序设计大赛感想】 一路艰辛 一路收获

    故事开始: 2014年来到大学,第一时间就听闻蓝桥杯,再听闻这个比赛全国总决赛的比赛地点是北京,我内心中瞬间涌现出一个信念:北京我是去定的了! 我中职读的是计算机网络专业,期间自学了C语言,怀着试一试 ...

  9. P8775 [蓝桥杯 2022 省 A] 青蛙过河

    题目链接:[蓝桥杯 2022 省 A] 青蛙过河 - 洛谷 解法一:打暴力: 二分+模拟 很直接,不解释,肯定超时 代码: #include<iostream> #include<c ...

最新文章

  1. skype for business server2015部署向导启动服务失败
  2. php中mysqlstat函数,PHP函数mysql_stat介绍
  3. 线上一次fullgc搞得鸡飞狗跳后,我总结了这篇文章
  4. [Python] ubuntu 上安装 Miniconda
  5. 什么是网关软件?国内有好的资源网关软件吗?
  6. 细数那些年ZStack拿过奖的案例
  7. JavaBean实现简单登录功能
  8. 秀米svg点击显示另一张图_SVG的雷,你踩过了没?
  9. matlab 矩阵 黑白,各位好 请问怎么用0 1矩阵画出黑白的矩阵如下图所示
  10. Word文档怎么删除html标签,word删除指定页面
  11. 要重复多少次变成潜意识_速读记忆相关:量变到质变,首先要做的是不断重复...
  12. [云原生专题-1]:总体-云原生初步探究,什么是云原生,云原生的基本特性
  13. Mac 上的 Alt 键是哪个?Alt 或 Option 键在 Mac 键盘上的作用是什么
  14. 六一快乐!管她几岁,快乐万岁!
  15. 软件测试之项目实战,必须知道的事与测试面试项目测试流程......
  16. fastunit中使用MapList一个注意例子
  17. 血族服务器暂时无法登录,天之炼狱归来服务端7.01架设教程问题解答
  18. 0.0.0.0和255.255.255.255
  19. ai2023 mac版 ai2023中文版(支持m1)全新功能
  20. 变局之下的应变:中国奥园的“三级”推进增长

热门文章

  1. 计算流体力学 有限体积法
  2. C/C++ 创建多级文件夹(mkdir)
  3. 幻数浅析(Magic Number)
  4. 机器学习中使用的独热编码
  5. 【鱼眼】M4/3用户对鱼眼镜头的误解(7.5mm的鱼眼镜头的等效焦距是12mm或15mm,但是依然是鱼眼镜头而不是广角镜头)
  6. lz4 安装 解压/压缩
  7. 【坑】MySQL数据库对于毫秒大于500的数据会进位
  8. java毕业设计车牌信息管理系统Mybatis+系统+数据库+调试部署
  9. pyecharts 中应用seaborns 调色板
  10. 使用GitHub、Gitee作为图片仓库,CSDN文档引入