题目
原题链接
思路
- 整体思路:暴力搜索 + 哈希表优化
 - 暴力遍历,遇到已经访问过的位置就提前剪枝,提高速度。
 - 哈希表使用技巧
vis[a << 20 | b << 10 | c]可以将三元组和访问状态进行一一映射。避免了使用更繁琐的数据结构。 - 树如下图所示
 

注意访问次序
代码
#include <iostream>#include <unordered_map>using namespace std;void dfs(int a, int b, int c, int n, unordered_map<int, int>& vis, int& ans) {    if (a > n || b > n || c > n) {        return;    }    if (vis[a << 20| b << 10| c] == 1) {        return;    }    if (!(1 <= a && a <= b && b <= c && c <= n)){        return;    }    vis[a << 20| b << 10| c] = 1;    if (((a ^ b ^ c) == 0) && (a + b > c)) {        ans += 1;    }    dfs(a + 1, b, c, n, vis, ans);    dfs(a, b + 1, c, n ,vis, ans);    dfs(a, b, c + 1, n, vis, ans);}int main() {    int n = 0;    scanf("%d", &n);    unordered_map<int, int> vis;    int ans = 0;    dfs(1, 1, 1, n, vis, ans);    printf("%d", ans);    return 0;}