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的.比較火.链接:这里 ...
随机推荐
- Navicat Premium 11.0.19中文破解版 安装
一.navicat-premium简介 它是一款可连接多种数据库的软件,具体参见官网介绍:http://www.navicat.com.cn/products/navicat-premium 二.下载 ...
- poj 2342 Anniversary party
题目链接:http://poj.org/problem?id=2342 题意:读题很容易懂,这里不做介绍. 解法:树形DP之路的第一道题. #include<iostream> #incl ...
- JS 时分秒验证
- max_flow(Dinic) 分类: ACM TYPE 2014-09-02 15:42 94人阅读 评论(0) 收藏
#include <cstdio> #include <iostream> #include <cstring> #include<queue> #in ...
- IIS Express 一个网站配置多个 域名
在配置localhost和IP都可以访问: 方法1: applicationhost.config文件配置: <bindings> <binding protocol=& ...
- .NET设计模式(18):迭代器模式(Iterator Pattern)(转)
概述 在面向对象的软件设计中,我们经常会遇到一类集合对象,这类集合对象的内部结构可能有着各种各样的实现,但是归结起来,无非有两点是需要我们去关心的:一是集合内部的数据存储结构,二是遍历集合内部的数据. ...
- 你用什么工具开发JavaScript?
Cloud9的CFO曾经在LinkedIn上面发起一个调查,原标题为:What tools do you use for Node.js development?,回贴者甚多. 目测很多人都使用VIM ...
- 解决Myeclipse 编辑jsp页面卡
解决Myeclipse 编辑jsp页面卡 编辑一个jsp页面时,如果每输入一下,CPU都100%一下,和大家分项一下. 问题: 当你编辑一个jsp页面时,如果每输入一下,CPU都100%一下,3, ...
- ListView的item选中效果
有时app会需要点击某个item并实现选中的效果,例如做pad时用Fragment实现的左侧列表右侧内容的效果,点击左侧某一个item后会高亮选中 有时简单的使用setSelected(boolean ...
- Android Drawable体系