手机九宫格图案密码解锁共有多少种
2个回答
2022-01-06
展开全部
代码:
#include<bits/stdc++.h>
using namespace std;
bool st[10];
int cnt[10],s[10] = {-1,1,2,1,3,0,3,1,2,1};
void dfs(int now,int dep){
cnt[dep] ++ ;
if(dep == 9)return ;
for(int i = 1 ; i <= 9 ; i ++ ){
if(!st[i]){
if(dep!=0&&s[i]==s[now]&&(i + now) % 4 == 0 && !st[(i + now) >> 1])continue;
if(dep!=0&&s[i]==s[now]&&(i + now) == 10 && !st[5])continue;
st[i] = 1;
dfs(i,dep+1);
st[i] = 0;
}
}
}
int main(){
dfs(0,0);
int sum = 0;
for(int i = 0 ; i < 10 ; i ++ )cout << cnt[i] << '\n';
for(int i = 4 ; i <= 9 ; i ++ )sum += cnt[i];
cout <<"总方案数:"<< sum << '\n';
}
输出:
1
9
56
320
1624
7152
26016
72912
140704
140704
总方案数:389112
#include<bits/stdc++.h>
using namespace std;
bool st[10];
int cnt[10],s[10] = {-1,1,2,1,3,0,3,1,2,1};
void dfs(int now,int dep){
cnt[dep] ++ ;
if(dep == 9)return ;
for(int i = 1 ; i <= 9 ; i ++ ){
if(!st[i]){
if(dep!=0&&s[i]==s[now]&&(i + now) % 4 == 0 && !st[(i + now) >> 1])continue;
if(dep!=0&&s[i]==s[now]&&(i + now) == 10 && !st[5])continue;
st[i] = 1;
dfs(i,dep+1);
st[i] = 0;
}
}
}
int main(){
dfs(0,0);
int sum = 0;
for(int i = 0 ; i < 10 ; i ++ )cout << cnt[i] << '\n';
for(int i = 4 ; i <= 9 ; i ++ )sum += cnt[i];
cout <<"总方案数:"<< sum << '\n';
}
输出:
1
9
56
320
1624
7152
26016
72912
140704
140704
总方案数:389112
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询