C++简易理论模型:DFS深搜法破解安卓手机锁

来源:互联网 发布:未识别的网络怎么删除 编辑:程序博客网 时间:2024/05/02 02:25

今天吃完晚饭突然想到手机锁如何破开,以前一直认为它只有9个点,总感觉它不见得怎么中用,只不过在普通人眼里看来很强大而已,今天一试,果然破解了~~~~HiaHia!!

过会去上自习,下面简略说下模型:

1                2                3

4                5                6

7                8                9

有三种点,角上的点(1、3、7、9),边中的点(2、4、6、8),中心点(5)。

把它们相互之间连接的关系矩阵如下给出

bool Graph[9][9] = {{0,1,0,1,1,1,0,1,0},{1,0,1,1,1,1,1,0,1},{0,1,0,1,1,1,0,1,0},{1,1,1,0,1,0,1,1,1},{1,1,1,1,0,1,1,1,1},{1,1,1,0,1,0,1,1,1},{0,1,0,1,1,1,0,1,0},{1,0,1,1,1,1,1,0,1},{0,1,0,1,1,1,0,1,0}};

直接用DFS深搜破解,探测函数如下

bool Detect(int point){if(TestRoute == ActualRoute)return true;if(TestRoute.size() == ActualRoute.size())return false;for(int i=1; i<=9; ++i){if ((true == Graph[point-1][i-1]) && //Able to connnect(TestRoute.end() == find(TestRoute.begin(), TestRoute.end(), i)) //Not included in Test Route){TestRoute.push_back(i);if(Detect(i))return true;TestRoute.pop_back();}}return false;}
最后直接做个简单的测试即可
#include "stdafx.h"#include <iostream>#include <vector>#include <iterator>using namespace std;vector<int> TestRoute, ActualRoute ;bool Graph[9][9] = {{0,1,0,1,1,1,0,1,0},{1,0,1,1,1,1,1,0,1},{0,1,0,1,1,1,0,1,0},{1,1,1,0,1,0,1,1,1},{1,1,1,1,0,1,1,1,1},{1,1,1,0,1,0,1,1,1},{0,1,0,1,1,1,0,1,0},{1,0,1,1,1,1,1,0,1},{0,1,0,1,1,1,0,1,0}};bool Detect(int point){if(TestRoute == ActualRoute)return true;if(TestRoute.size() == ActualRoute.size())return false;for(int i=1; i<=9; ++i){if ((true == Graph[point-1][i-1]) && //Able to connnect(TestRoute.end() == find(TestRoute.begin(), TestRoute.end(), i)) //Not included in Test Route){TestRoute.push_back(i);if(Detect(i))return true;TestRoute.pop_back();}}return false;}int main(){int tmp;while(cin>>tmp)ActualRoute.push_back(tmp);for(int start=1; start<=9; ++start){TestRoute.push_back(start);if(Detect(start)){cout<<"破解成功!"<<endl;copy(TestRoute.begin(),TestRoute.end(),ostream_iterator<int>(cout," ")); TestRoute.pop_back();break;}else TestRoute.pop_back();}ActualRoute.clear();system("pause");return 0;}
最后的结果:

5 4 7 8 9 6 3 2 1^Z
破解成功!
5 4 7 8 9 6 3 2 1 请按任意键继续. . .




原创粉丝点击