ZOJ Problem Set - 3861 Valid Pattern Lock(dfs)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3861
这道题当时没做出来,后来经过队友提醒才做出来。
3*3的九宫格,给你其中n个点按下面要求连起来:
1. 给你的n个点都要激活(至少经过一次)
2. 如果点A,B相连后要经过另一个点C,则C在序列中的位置必须在A,B之前 如 1 7 4是不合法的
3.线段相交是没关系的,如 7 6 9 4
我是直接生成n个数的全排列,然后在所有排列里面去掉不合法的。
#include <iostream>
#include <cstdio>
#include <cmath>
#include <vector>
#include <cstring>
#include <string>
#include <algorithm>
#include <string>
#include <set>
#include <functional>
#include <numeric>
#include <sstream>
#include <stack>
#include <map>
#include <queue> #define CL(arr, val) memset(arr, val, sizeof(arr)) #define ll long long
#define inf 0x7f7f7f7f
#define lc l,m,rt<<1
#define rc m + 1,r,rt<<1|1
#define pi acos(-1.0) #define L(x) (x) << 1
#define R(x) (x) << 1 | 1
#define MID(l, r) (l + r) >> 1
#define Min(x, y) (x) < (y) ? (x) : (y)
#define Max(x, y) (x) < (y) ? (y) : (x)
#define E(x) (1 << (x))
#define iabs(x) (x) < 0 ? -(x) : (x)
#define OUT(x) printf("%I64d\n", x)
#define lowbit(x) (x)&(-x)
#define Read() freopen("data.txt", "r", stdin)
#define Write() freopen("a.txt", "w", stdout);
#define maxn 1000000000
#define N 500010
using namespace std; int b[N][];
int n,ans,p[],flag[]; bool check(int x)
{
memset(flag,,sizeof(flag)); //标记访问或者没访问
for(int i=;i<n;i++)
{
flag[b[x][i]]=;
if((b[x][i]==&&b[x][i+]==&&flag[]==)||(b[x][i]==&&b[x][i+]==&&flag[]==)
||(b[x][i]==&&b[x][i+]==&&flag[]==)||(b[x][i]==&&b[x][i+]==&&flag[]==)
||(b[x][i]==&&b[x][i+]==&&flag[]==)||(b[x][i]==&&b[x][i+]==&&flag[]==)
||(b[x][i]==&&b[x][i+]==&&flag[]==)||(b[x][i]==&&b[x][i+]==&&flag[]==)
||(b[x][i]==&&b[x][i+]==&&flag[]==)||(b[x][i]==&&b[x][i+]==&&flag[]==)
||(b[x][i]==&&b[x][i+]==&&flag[]==)||(b[x][i]==&&b[x][i+]==&&flag[]==)
||(b[x][i]==&&b[x][i+]==&&flag[]==)||(b[x][i]==&&b[x][i+]==&&flag[]==)
||(b[x][i]==&&b[x][i+]==&&flag[]==)||(b[x][i]==&&b[x][i+]==&&flag[]==))
return ;
}
return ;
}
int main()
{
//Read();
//Write();
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=;i<n;i++) scanf("%d",&p[i]);
sort(p,p+n);
ans=;
memset(b,,sizeof(b));
do
{
for(int i=;i<n;i++)
b[ans][i]=p[i];
ans++;
}while(next_permutation(p,p+n));
int x=ans;
for(int i=;i<ans;i++)
{
if(check(i)==)
x--;
}
printf("%d\n",x);
for(int i=;i<ans;i++)
{
if(check(i))
{
for(int j=;j<n;j++)
{
if(j!=n-)
printf("%d ",b[i][j]);
else
printf("%d\n",b[i][j]);
}
} }
}
return ;
}
dfs也可以做!
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std; int mp[][];
int a[];
int n;
bool vis[];
int cnt;
int s[]; void init()
{
mp[][] = ; mp[][] = ;
mp[][] = ; mp[][] = ;
mp[][] = ; mp[][] = ;
mp[][] = ; mp[][] = ;
mp[][] = ; mp[][] = ;
mp[][] = ; mp[][] = ;
mp[][] = ; mp[][] = ;
mp[][] = ; mp[][] = ;
} void dfs(int pre,int num,int op)
{
// printf("%d %d\n",pre,num);
int i,t;
if(num==n)
{
if(op){
for(i=;i<n-;i++)printf("%d ",s[i]);
printf("%d\n",s[n-]);
}
cnt++;
return;
} for(i=;i<n;i++)
{
if(!vis[a[i]])
{
if(mp[pre][a[i]]==||vis[mp[pre][a[i]]]==true)
{
vis[a[i]]=true;
s[num]=a[i];
dfs(a[i],num+,op);
vis[a[i]]=false;
}
}
}
}
int main()
{
//freopen("a.txt","r",stdin);
int T,i,j;
scanf("%d",&T);
init();
while(T--)
{
scanf("%d",&n);
for(i=;i<n;i++){
scanf("%d",&a[i]);
}
sort(a,a+n);
cnt=;
for(i=;i<n;i++){
memset(vis,false,sizeof(vis));
vis[a[i]]=true;
s[]=a[i];
dfs(a[i],,);
}
printf("%d\n",cnt);
for(i=;i<n;i++){
memset(vis,false,sizeof(vis));
vis[a[i]]=true;
s[]=a[i];
dfs(a[i],,);
}
}
return ;
}
ZOJ Problem Set - 3861 Valid Pattern Lock(dfs)的更多相关文章
- ACM学习历程—ZOJ 3861 Valid Pattern Lock(dfs)
Description Pattern lock security is generally used in Android handsets instead of a password. The p ...
- DFS+模拟 ZOJ 3861 Valid Pattern Lock
题目传送门 /* 题意:手机划屏解锁,一笔连通所有数字,输出所有可能的路径: DFS:全排列 + ok () 判断函数,去除一些不可能连通的点:) */ #include <cstdio> ...
- ZOJ 3861 - Valid Pattern Lock
3861 - Valid Pattern Lock Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & ...
- ZOJ - 3861 Valid Pattern Lock 【全排列】
题目链接 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3861 思路 先生成全排列,然后判断哪些情况不符合的,剔除就好了 ...
- 浙江大学2015年校赛B题 ZOJ 3861 Valid Pattern Lock
这道题目是队友写的,貌似是用暴力枚举出来. 题意:给出一组数,要求这组数在解锁的界面可能的滑动序列. 思路:按照是否能够直接到达建图,如1可以直接到2,但是1不能直接到3,因为中间必须经过一个2. 要 ...
- Valid Pattern Lock(dfs + 暴力)
Valid Pattern Lock Time Limit: 2 Seconds Memory Limit: 65536 KB Pattern lock security is genera ...
- ZOJ Problem Set - 3829Known Notation(贪心)
ZOJ Problem Set - 3829Known Notation(贪心) 题目链接 题目大意:给你一个后缀表达式(仅仅有数字和符号),可是这个后缀表达式的空格不幸丢失,如今给你一个这种后缀表达 ...
- ZOJ Problem Set - 1025解题报告
ZOJ Problem Set - 1025 题目分类:基础题 原题地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=10 ...
- ZOJ Problem Set - 2563 Long Dominoes 【如压力dp】
称号:ZOJ Problem Set - 2563 Long Dominoes 题意:给出1*3的小矩形.求覆盖m*n的矩阵的最多的不同的方法数? 分析:有一道题目是1 * 2的.比較火.链接:这里 ...
随机推荐
- Leetcode#99 Recover Binary Search Tree
原题地址 中序遍历二叉搜索树,正常情况下所有元素都应该按递增排列,如果有元素被交换,则会出现前面元素大于后面的情况,称作反序.由于交换了两个节点,所以通常会有两处反序,但如果是两个相邻节点发生了交换, ...
- TLS学习总结
我们有知道 Immunity Debugger,OD 调试器,在调试程序时会设断在OEP(修改第一个字节0xcc).我在想,使用什么编程技术,代码可以在OEP前被执行.在网上找了些资料,在论坛上看到许 ...
- AngularJs学习笔记--Forms
原版地址:http://code.angularjs.org/1.0.2/docs/guide/forms 控件(input.select.textarea)是用户输入数据的一种方式.Form(表单) ...
- HTTP状态码一览表(HTTP Status Code)
copy from:http://www.189works.com/article-43064-1.html 1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态代码. 代码 说明 100 ( ...
- 帝国cms无法注册登录快速解决方法 附路径
帝国cms安装相对比较简单,一路next,一般从网上下载的系统都会带一些数据,恢复备份数据后,清除缓存,更新数据,一个copy版的网站就出来了.但是为了se的友好需要改动很多地方,不然很容易被认为是s ...
- 结合NGUI做的手机拍照(可自定义相框)
原地址:http://www.unity蛮牛.com/thread-18220-1-1.html 在次此之前我们先要了解一下下面的我要讲的几个内容: 一.为什么要用NGUI,因为NGUI的可以做屏幕自 ...
- Sqli-labs less 21
Less-21 本关对cookie进行了base64的处理,其他的处理流程和less20是一样的. 我们这里可以利用less20同样的方法,但是需要将payload进行base64编码处理(注意这里对 ...
- D3D11 Debug Layer的bug
在开发D3D应用程序时,我们会使用Debug Layer来调试应用程序,以确保我们的程序在最终发布时没有warnings和errors.不过最近在开发应用程序时遇到了这样的问题,就是我把多个网格模型的 ...
- POJ 3678
Katu Puzzle Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7391 Accepted: 2717 Descr ...
- SVN用法(merge,branch,switch)
SVN merge命令用法 使用svn的merge命令,把一个版本的变化合并到另一个版本.我使用的tortoise,在当前的工作目录点击右键,选择merge,在from框输入源url,在revisio ...