Valid Pattern Lock(dfs + 暴力)
2015-04-13 21:19
302 查看
Valid Pattern LockTime Limit: 2 Seconds Memory Limit: 65536 KB
Pattern lock security is generally used in Android handsets instead of a password. The pattern lock can be set by joining points on a 3 × 3 matrix in a chosen order. The points of the matrix are registered in a numbered order starting with 1 in the upper left corner and ending with 9 in the bottom right corner.
View Code
Pattern lock security is generally used in Android handsets instead of a password. The pattern lock can be set by joining points on a 3 × 3 matrix in a chosen order. The points of the matrix are registered in a numbered order starting with 1 in the upper left corner and ending with 9 in the bottom right corner.
#include<stdio.h> #include<string.h> #include<algorithm> int T ; int n , a[15] ; int b[15] ; bool vis[15] ; bool blog[15] ; bool flag = 0 ; int cnt = 0 ; int ans[362880 + 10][11] ; bool judge (int sx , int ex) { if (sx == 1 && ex == 3 || sx == 3 && ex == 1) { if (blog[2]) return true ; return false ; } else if (sx == 1 && ex == 7 || sx == 7 && ex == 1) { if (blog[4]) return true ; return false ; } else if (sx == 3 && ex == 9 || sx == 9 && ex == 3) { if (blog[6]) return true ; return false ; } else if (sx == 7 && ex == 9 || sx == 9 && ex == 7) { if (blog[8]) return true ; return false ; } else if (sx == 2 && ex == 8 || sx == 8 && ex == 2) { if (blog[5]) return true ; return false ; } else if (sx == 4 && ex == 6 || sx == 6 && ex == 4) { if (blog[5]) return true ; return false ; } else if (sx == 1 && ex == 9 || sx == 9 && ex == 1) { if (blog[5]) return true ; return false ; } else if (sx == 3 && ex == 7 || sx == 7 && ex == 3) { if (blog[5]) return true ; return false ; } return true ; } void dfs (int deep) { if (deep == n + 1 ) { memset (blog , 0 , sizeof(blog)) ; flag = 1 ; blog[b[1]] = 1 ; for (int i = 2 ; i <= n && flag; i++) { flag = judge (b[i - 1] , b[i]) ; blog[b[i]] = 1 ; } if (flag) { for (int i = 1 ; i <= n ; i++) { ans[cnt][i] = b[i] ; } cnt ++ ; } /* for (int i = 1 ; i <= n ; i++) { printf ("%d " , a[i]); } puts ("") ;*/ return ; } for (int i = 1 ; i <= n ; i++) { if (vis[a[i]] == 0) { vis[a[i]] = 1 ; b[deep] = a[i] ; dfs (deep + 1) ; vis[a[i]] = 0 ; } } } int main () { //freopen ("a.txt" , "r" , stdin ) ; scanf ("%d" , &T) ; while (T --) { scanf ("%d" , &n) ; for (int i = 1 ; i <= n ; i++) { scanf ("%d" , &a[i]); } cnt = 0 ; std::sort (a + 1 , a + n + 1 ) ; for (int i = 1 ; i <= n ; i++) { memset (vis , 0 , sizeof(vis)) ; vis[a[i]] = 1 ; b[1] = a[i] ; dfs (2) ; } printf ("%d\n" , cnt) ; for (int i = 0 ; i < cnt ; i++) { for (int j = 1 ; j <= n ; j++) { printf ("%d%c" , ans[i][j] , j == n ? '\n' : ' ') ; } } } return 0 ; }
View Code
相关文章推荐
- Valid Pattern Lock-ZOJ 暴力DFS搜索
- ZOJ校赛——DFS+暴力——Valid Pattern Lock
- ZOJ3861:Valid Pattern Lock(DFS)
- DFS+模拟 ZOJ 3861 Valid Pattern Lock
- ZOJ3861 Valid Pattern Lock(DFS||打表+枚举)
- zoj 3861 Valid Pattern Lock (DFS)
- ZOJ 3861 Valid Pattern Lock(深度优先遍历dfs,有限制条件的全排列)
- ACM学习历程—ZOJ 3861 Valid Pattern Lock(dfs)
- [水题+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或其他,两种解法)
- ZOJ 3861 Valid Pattern Lock
- zoj3861——Valid Pattern Lock(全排列)
- ZOJ 3861 Valid Pattern Lock
- ZJU Valid Pattern Lock 解题报告
- 浙大第15届校赛 3361 Valid Pattern Lock (搜索)
- ZOJ3861 Valid Pattern Lock
- 解题报告 之 ZOJ3861 Valid Pattern Lock