当前位置: 首页 > news >正文

Gray Code (格雷码)

题目:

思路:

这里有两个思路,如果我们不了解 gray code 这个东西那么我们如何去想?

由于这里数据小,其实我们可以使用图论的方式来写,当然也可以找规律构造,其实这属于方法二

图论:

我们给每个数都写出其二进制形式,然后探究其下一个 gray code 是谁,那么我们就可以根据其性质分析,由于我们只需要一位不同,那么直接异或每一位就能求出其下一个节点的可能,由于 n <= 16,那么我们一个节点最多只有 16 个节点,所以我们直接建图然后跑一遍即可,由于一定有解,所以直接模拟即可,1 << 16 约为 7e4,可过

构造:

根据性质,我们对于位置 i,我们对应的 gray code 就是 i ^ (i >> 1),具体证明不在本次讨论范围内

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define yes cout << "YES\n"
#define no cout << "NO\n"
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
int n, mx;
string num[70000];
vector<vector<int>> g(70000);
string to2(int x)
{string ans;for (int i = n - 1; i >= 0; i--){ans += '0' + ((x >> i) & 1);}return ans;
}
int sonans[70000];
int vis[70000];
int over = 0;
void dfs(int fa, int len)
{if (over || len == mx+1){over = 1;return;}vis[fa] = 1;for (auto & son : g[fa]){if(vis[son] || over) continue;sonans[fa] = son;dfs(son,len + 1);}vis[fa] = 0;
}int graycode[70000];
void solve2()
{cin >> n;for (int i = 0; i < 1<<n; i++){graycode[i] = i ^ (i >> 1);cout << to2(graycode[i]) << endl;}  
}void solve()
{cin >> n;mx = pow(2, n) - 1;for (int i = 0; i <= mx; i++){num[i] = to2(i);for (int j = n - 1; j >= 0; j--){g[i].push_back(i ^ (1LL << j));}}dfs(0,1);int now = 0;while (now != -1){cout << num[now] << endl;now = sonans[now];}
}signed main()
{memset(sonans,-1,sizeof sonans);ios::sync_with_stdio(false);cin.tie(nullptr);int t = 1;while (t--){solve2();}return 0;
}

http://www.dtcms.com/a/359278.html

相关文章:

  • 2025.8.30项目二基于UDP的TFTP文件传输
  • 【ICO】快速制作ICON教材/使用icofx3快速制作ico
  • 【多项式】快速沃尔什变换 (FWT)
  • 复现 RoboDK 机器人校准功能(以Staubli TX2‑90L / TX200机械臂为测试对象)
  • 关于铭飞平台企业官网模板使用中常到的问题、企业官网的百度认证以及IDEA编辑启动器的快捷方法/Apipost本地和云端没法同步的问题解决
  • 如何改变传统教育的消费习惯-第三代结束-第四代开启
  • 数值分析——数据误差对函数值的影响
  • 数据治理进阶——26页如何进行数据治理【附全文阅读】
  • 项目管理方法论有哪些流派
  • TuringComplete游戏攻略(一、基础逻辑电路)
  • Python(五)Python_C API详细
  • 嵌入式Linux输入子系统驱动开发
  • [光学原理与应用-332]:ZEMAX - 序列模式与非序列模式的本质、比较
  • FPGA 实现FOC 无刷电机控制器
  • 电子健康记录风险评分与多基因风险评分的互补性与跨系统推广性研究
  • 洛谷 P1395 会议 -普及/提高-
  • 吴恩达机器学习(四)
  • 10. 函数和匿名函数(二)
  • 深入理解 shared_ptr 与 weak_ptr:访问控制与线程安全
  • 广东省省考备考(第九十天8.30)——判断推理(第十节课)
  • Java多线程初阶
  • C++讲解---如何设计一个类
  • 防火墙技术(三):状态检测和会话机制
  • 接口自动化测试框架
  • python pyqt5开发DoIP上位机【自动化测试的逻辑是怎么实现的?】
  • 深度解析Fluss LockUtils类的并发艺术
  • 手写MyBatis第43弹:插件拦截原理与四大可拦截对象详解
  • Agent实战教程:LangGraph结构化输出详解,让智能体返回格式化数据
  • Keil5 MDK_541官网最新版下载、安装
  • offsetof宏的实现