[水题+dfs] zoj 3861 Valid Pattern Lock
来源:互联网 发布:js视频上传插件 编辑:程序博客网 时间:2024/05/17 23:16
题意:
给n个不同的整数(3<=n<=9),问你能绘制出多少种解锁的方案。
输出方案数,以及按字典序输出每种方案。
思路:
一个很水的dfs全排列,加上特判就好了。
特判就是1->9的话就必定经过5等。
这里要注意的是。
中间所经过的数字是必须存在的。
比如要想1->9就必须有5.
5要么被用过,要么就经过5
例子就是 1 3 5 9这四个数。
实际的方案是只有2种
3 5 1 9 和 3 5 9 1
然后就是输入完排下序,保证字典序。
最后就是弱太弱了,写了2个dfs一个算个数,一个输出。
代码:
#include"stdio.h"#include"algorithm"#include"string.h"#include"iostream"#include"queue"#include"map"#include"string"#define mod 1000000007using namespace std;int mp[12][12];int n,ans,used[123],a[123],b[123];void f(){ mp[1][3]=2;mp[3][1]=2; mp[1][7]=4;mp[7][1]=4; mp[1][9]=5;mp[9][1]=5; mp[2][8]=5;mp[8][2]=5; mp[3][7]=5;mp[7][3]=5; mp[3][9]=6;mp[9][3]=6; mp[4][6]=5;mp[6][4]=5; mp[7][9]=8;mp[9][7]=8;}void dfs(int cur,int x){ if(x==n) { ans++; return ; } for(int i=0;i<n;i++) { if(used[a[i]]==0 && (mp[cur][a[i]]==0 || used[mp[cur][a[i]]]==1)) { used[a[i]]=1; dfs(a[i],x+1); used[a[i]]=0; } }}void dfs1(int cur,int x){ if(x==n) { for(int i=0;i<n;i++) printf(i==n-1?"%d\n":"%d ",b[i]); return ; } for(int i=0;i<n;i++) { if(used[a[i]]==0 && (mp[cur][a[i]]==0 || used[mp[cur][a[i]]]==1)) { used[a[i]]=1; b[x]=a[i]; dfs1(a[i],x+1); used[a[i]]=0; } }}int main(){ int t; cin>>t; memset(mp,0,sizeof(mp)); f(); while(t--) { scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n); memset(used,0,sizeof(used)); ans=0; dfs(0,0); printf("%d\n",ans); memset(used,0,sizeof(used)); dfs1(0,0); } return 0;}
0 0
- [水题+dfs] zoj 3861 Valid Pattern Lock
- zoj 3861 Valid Pattern Lock (DFS)
- ZOJ 3861 Valid Pattern Lock DFS
- zoj 3861 Valid Pattern Lock(dfs)
- zoj 3861 Valid Pattern Lock 手势密码 DFS
- Valid Pattern Lock-ZOJ 暴力DFS搜索
- ZOJ 3861 Valid Pattern Lock
- ZOJ 3861 Valid Pattern Lock
- zoj 3861 Valid Pattern Lock
- ZOJ 3861 Valid Pattern Lock
- ZOJ 3861 Valid Pattern Lock
- zoj 3861 Valid Pattern Lock
- ZOJ 3861 - Valid Pattern Lock
- Valid Pattern Lock --dfs
- ZOJ - 3861 Valid Pattern Lock(dfs或其他,两种解法)
- zoj 3861 Valid Pattern Lock(以及自己对dfs的一些理解)
- ZOJ 3861 Valid Pattern Lock(深度优先遍历dfs,有限制条件的全排列)
- ZOJ--(5464)Valid Pattern Lock
- codeforces17E Palisection
- 【康托展开】
- tomcat发布web项目
- Windows下Git使用Winmerge作为difftool
- 求解最长回文子串 之Manacher算法
- [水题+dfs] zoj 3861 Valid Pattern Lock
- Affymetrix芯片分析:获取差异表达基因系列三_SAM
- 用scala实现辗转相除法
- MyEclipse默认编码修改
- Ajax和JSON
- cocos2dx继承结构图
- 队列queue的详细讲解
- mysql如何起二进制日志
- Spring事务管理(转)