手机九宫格加密种数

来源:互联网 发布:mac 怎么设置无线鼠标 编辑:程序博客网 时间:2024/04/30 19:16
加密规则无外乎下面2种
1、任何两个点都可以直接相连。
这个很简单,1到9的基数为9排列相加

#include<stdio.h>char SUDOHU[] = "abcdefghi";int queue[9] = {0};int flag[9] = {0};unsigned int count = 0;void perm(int s, int n){    int i;    if(s > n)    {        return;    }     if (s == n)     {         count++;         return ;     }     for (i = 0; i < n; i++)     {         if (flag[i] == 0)         {             flag[i] = 1;             queue[s] = SUDOHU[i];             perm(s+1, n);             flag[i] = 0;         }     } } int main() {    int i;    for(i = 1; i <= 9; i++)        perm(9 - i, 9);    printf("%d\n", count); }


运行结果

这种加密方式共有986409种
2、不能隔点相连,这种方式略麻烦
#include<stdio.h>#include<string.h>char SUDOKU[] = "abcdefghi";char AC_MATCH[] = "bdef";char B_MATCH[] = "acdef";char DF_MATCH[] = "eabcghi";char E_MATCH[] = "abcdfghi";char GI_MATCH[] = "hdef";char H_MATCH[] = "gidef";int queue[9] = {0};int top = 0;int count = 1;int flag[9] = {0};char get_new[] = {0};int byte_match(char pro_byte, char next_byte){int i, flag = 0;switch(pro_byte){case 'a':for(i = 0; i < strlen(AC_MATCH); i++){if(next_byte == AC_MATCH[i]){flag = 1;break;}}break;case 'b':for(i = 0; i < strlen(B_MATCH); i++){if(next_byte == B_MATCH[i]){flag = 1;break;}}break;case 'c':for(i = 0; i < strlen(AC_MATCH); i++){if(next_byte == AC_MATCH[i]){flag = 1;break;}}break;case 'd':for(i = 0; i < strlen(DF_MATCH); i++){if(next_byte == DF_MATCH[i]){flag = 1;break;}}break;case 'e':for(i = 0; i < strlen(E_MATCH); i++){if(next_byte == E_MATCH[i]){flag = 1;break;}}break;case 'f':for(i = 0; i < strlen(DF_MATCH); i++){if(next_byte == DF_MATCH[i]){flag = 1;break;}}break;case 'g':for(i = 0; i < strlen(GI_MATCH); i++){if(next_byte == GI_MATCH[i]){flag = 1;break;}}break;case 'h':for(i = 0; i < strlen(H_MATCH); i++){if(next_byte == H_MATCH[i]){flag = 1;break;}}break;case 'i':for(i = 0; i < strlen(GI_MATCH); i++){if(next_byte == GI_MATCH[i]){flag = 1;break;}}break;}return flag;}void perm(int s, int n){int i, match_flag = 1, new_count = 0;if(s > n){return;}if (s == n){for (i = 0; i < n; i++){if(queue[i] != '\0'){get_new[new_count++] = queue[i];}}for (i = 0; i < strlen(get_new) - 1; i++){if(byte_match(get_new[i], get_new[i + 1]) == 0){match_flag = 0;break;}}if(match_flag){for (i = 0; i < strlen(get_new); i++)printf("%c", get_new[i]);printf(" %d", count++);}printf("\t");return ;}for (i = 0; i < n; i++){if (flag[i] == 0){flag[i] = 1;queue[s] = SUDOKU[i];perm(s+1, n);flag[i] = 0;}}}int main(){int i;for(i = 1; i <= 9; i++)perm(9 - i, 9);}
运行结果如下

这种加密方式共有38389种
0 0