首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-11-22 
C++简易理论模型:DFS深搜法破解安卓手机锁今天吃完晚饭突然想到手机锁如何破开,以前一直认为它只有9个点,

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

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

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

1                2                3

4                5                6

7                8                9

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

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

#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 请按任意键继续. . .




热点排行