123 456 789

#include <iostream>
#include <vector>

using namespace std;

vector<bool> visit(10, false);

bool isOk(int next, int last) {
    if (visit[next]) return false;
    if((next + last)%2==1) return true;
    int mid = (next + last) / 2;
    if(visit[mid]==1) return true;

    int front[] = {1,4,7,1,2,3,1,3};
    int back[] =  {3,6,9,7,8,9,9,7};
    for(int i=0;i<8;i++){
        if((last == front[i] && next ==back[i]) || (last == back[i] && next == front[i]))return false;
    }
    return true;
}

int numberofPath(int last, int len) {
    if (len == 0) return 1;
    int sum = 0;
    for (int next = 1; next <= 9; ++next) {
        if (isOk(next, last)) {
            visit[next] = true;
            sum += numberofPath(next, len - 1);
            visit[next] = false;
        }
    }
    return sum;
}

int main() {
    int cnt = 0;
    for (int len = 4; len <= 9; ++len) {
        visit[1] = true;
        cnt += 4 * numberofPath(1, len - 1);
        visit[1] = false;
        visit[2] = true;
        cnt += 4 * numberofPath(2, len - 1);
        visit[2] = false;
        visit[5] = true;
        cnt += numberofPath(5, len - 1);
        visit[5] = false;
    }
    cout << cnt << endl;
}
全部评论

相关推荐

头像
11-09 17:30
门头沟学院 Java
TYUT太摆金星:我也是,好几个华为的社招找我了
点赞 评论 收藏
分享
11-03 14:38
重庆大学 Java
AAA求offer教程:我手都抬起来了又揣裤兜了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务