算法分析与设计实验-Gray码问题
Gray码问题
问题描述
Gray码是一个长度为2n的序列。序列中无相同的元素,每个元素都是长度为n位的串,相邻元素恰好只有一位不同。用分治策略设计一个算法对任意的n构造相应的Gray码。由文件input.txt提供输入数据n。程序运行结束时,将得到的所有编码输出到文件output.txt中。
实验设计
int arr[1024][1024]; //arr[i][j]表示第i个格雷码的第j位
ifstream f("D://算法分析与设计/input2.txt"); //从文件中读取gray码位数
递归算法求Gray码:
void gray(int a, int b)//a为宽度,b为个数
{
if (宽度为1)
{
返回Gray为0和1
}
for (0-a/2)
{
//生成的Gray码前一半最高位填“0”
//后一半最高位位填“1”
}
gray(a / 2, b - 1); //生成b-1位Gray码,填写到目标码上半部分
for (int i = a / 2; i <a; i++)
for (int j = 0; j < b - 1; j++)
反向复制到下半部分
}
ofstream of("D://算法分析与设计/output2.txt");//将Gray码写入文件。
程序结束
实验代码
#include "iostream"
#include "cmath"
#include<fstream>
#include<string>
using namespace std;
int arr[1024][1024]; //arr[i][j]表示第i个Gray码的第j位
//构造b位Gray码
//a为Gray码的个数
void gray(int a, int b)
{
if (b == 1) //如果Gray码宽度为1
{
arr[0][0] = 0;
arr[1][0] = 1;
return;
}
for (int i = 0; i < a / 2; i++) //Gray码最高位
{
arr[i][b - 1] = 0; //生成的Gray码前一半最高位填“0”
arr[a - i - 1][b - 1] = 1; //后一半最高位位填“1”
}
gray(a / 2, b - 1); //生成b-1位Gray码,填写到目标码高半部分
for (int i = a / 2; i <a; i++) //Gray码低半部分
for (int j = 0; j < b - 1; j++)
arr[i][j] = arr[a - i - 1][j];
}
int main()
{
int b;
string row;
ifstream f("D://算法分析与设计/input2.txt"); //从文件中读取gray码位数
getline(f,row);
b = stoi(row);
f.close();
int a = pow(2, b); //Gray码个数
gray(a, b);
ofstream of("D://算法分析与设计/output2.txt");//将Gray码写入文件。
cout << "Gray码为:\n";
for (int i = 0; i < a; i++)
{
for (int j = 0; j < b; j++)
{
cout << arr[i][j];
of << arr[i][j] << ",";
}
of << endl;
cout << endl;
}
of.close();
return 0;
}
本文作者:发呆鱼
本文链接:https://www.cnblogs.com/dyiblog/articles/15929743.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步