分治法之Gray问题
来源:互联网 发布:淘宝上比较好的男鞋店 编辑:程序博客网 时间:2024/05/20 22:02
i. Gray码问题
« 问题描述
Gray码是一个长度为2n的序列。序列中无相同的元素,每个元素都是长度为n位的串,相邻元素恰好只有一位不同。用分治策略设计一个算法对任意的n构造相应的Gray码。
« 编程任务
利用分治策略试设计一个算法对任意的n构造相应的Gray码。
« 数据输入
由文件input.txt提供输入数据n。
« 结果输出
程序运行结束时,将得到的所有编码输出到文件output.txt中。
输入文件示例
输出文件示例
input.txt
output.txt
3
0 0 0
0 0 1
0 1 1
0 1 0
1 1 0
1 1 1
1 0 1
1 0 0
« 实现提示
把原问题分解为两个子问题,分别对两个子问题的每个数组后一位加0和1。
这是典型的分治法问题,采用分治的思想,代码如下:
#include<iostream>#include<math.h>#include<fstream> using namespace std;void getGray(int **arr,int n,int row){//结束标志 if(n == 1){arr[0][n-1] = 0;arr[1][n-1] = 1;return;}for(int i = 0; i < row/2 ; i++) { arr[i][n-1] = 0;//上半部分赋值为0 arr[row-i-1][n-1]=1; //下半部分赋值为1 } getGray(arr,n-1,row/2); for(int j=row/2; j<row; j++) for(int k=0; k<n-1; k++) arr[j][k] = arr[row-j-1][k];} int main(){ifstream in("F://不归路//编程//算法设计与分析B//文件夹//input.txt"); ofstream out("F://不归路//编程//算法设计与分析B//文件夹//output.txt");int n = 0;//文件内容in>>n;if(n==0 || n>20){cout<<"输入错误"<<endl;return 0; } //cout<<n<<endl;int row=pow(2,n); int **arr=new int*[row]; for(int m=0;m<row;m++){ arr[m]=new int[n]; } //调用递归函数 getGray(arr,n,row); //输出 for(int i=0;i<row;i++){ for(int j=n-1;j>=0;j--){ cout<<arr[i][j];out<<arr[i][j];} cout<<endl;out<<"\n";}return 0;}
阅读全文
1 0
- 分治法之Gray问题
- 初识分治法,动态规划——中位数,Gray码与零钱问题
- 凸包问题之分治法
- 分治法-选择问题
- 大数据笔试面试问题之分治法解决
- 经典算法之棋盘覆盖问题 --分治法
- c#数据结构之最大子数组问题(分治法)
- gray码_分治策略_java
- 构造Gray码的分治算法
- 分治法之我见
- 算法之分治法
- 算法之分治法
- leetcode之Gray code
- leetcode之Gray Code
- LeetCode之Gray Code
- Leetcode 之 Gray Code
- 【Leetcode】之Gray Code
- 分治策略之棋盘覆盖问题(ChessBoard)
- 城市交通应急指挥平台
- Python_Django-2
- Android aes 加密位数超出限制
- Android书籍推荐:总结9位开源社区专家推荐
- 添加好友
- 分治法之Gray问题
- 0710编程之美二进制扩展问题
- hdu1041 Computer Transformation 大数找规律
- JVM内存模型
- week2 多变量线性回归
- Servlet学习笔记 -- day03 servlet三大域对象总结
- PromiseKit 封装异步Api
- Oracle-1
- 安全篇-AES/RSA加密机制