栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构 C 代码 6.2: 哈夫曼树&6.3: N 后问题

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构 C 代码 6.2: 哈夫曼树&6.3: N 后问题

1.C 代码 6.2: 哈夫曼树

代码如下

#include 
#include 
#include 
using namespace std; 
 
#define MaxSize 1024

typedef struct wordcnt
{
	char ch;
	int cnt=0;
}Count;
typedef struct NumCount
{
	Count count[MaxSize];
	int length=0;
}NumCount;
 

typedef struct HTree
{
	char data;
	int weight;
	int parent,lchild,rchild;
}HTNode,*HuffmanTree;
typedef struct HCode
{
	char data;
	char* str;
}*HuffmanCode;
 
void ReadData(char *source);  // 读入文件 
void WordCount(char *data,NumCount *paraCnt); // 统计次数 
void Show(NumCount *paraCnt);   // 展示次数 
void CreateHuffmanTree(HuffmanTree &HT,int length,NumCount cntarray);  // 创建哈夫曼树 
void select(HuffmanTree HT,int top,int *s1,int *s2);  // 选择权重最小的两个节点 
void CreateHuffmanCode(HuffmanTree HT,HuffmanCode &HC,int length);  // 创建哈夫曼编码 
void Encode(char *data,HuffmanCode HC,int length);  // 将读入的文件编码,写到txt文件 
void Decode(HuffmanTree HT,int length);  //读入编码文件,解码 
 
int main(int argc, char** argv) {
	char data[MaxSize];  
	NumCount Cntarray;
	ReadData(data);  // 读入数据 
	WordCount(data,&Cntarray);  // 统计次数 
	Show(&Cntarray); //可以查看每个单词出现的对应次数 
	HuffmanTree tree;
	CreateHuffmanTree(tree,Cntarray.length,Cntarray);  // 建树 
	HuffmanCode code;  
	CreateHuffmanCode(tree,code,Cntarray.length);  // 创建编码 
	Encode(data,code,Cntarray.length);  // 生成编码文件 
	Decode(tree,Cntarray.length);  // 解码 
	cout<<"请查看文件确认解码后的文件"<length;++j)
		{
			if(paraCnt->count[j].ch == data[i]) // 若已有记录,直接++ 
			{
				++paraCnt->count[j].cnt;
				flag = 1;
				break;
			}
			
		}
		if(!flag) // 没有记录,则新增 
		{
			paraCnt->count[paraCnt->length].ch = data[i];
			paraCnt->count[paraCnt->length].cnt++;
			paraCnt->length++;
		}
	}
}

void Show(NumCount* paraCnt)
{
	cout<<"the length is "<length<length;++i)
	{
		cout<<"The character "<count[i].ch<<"  appears  "<count[i].cnt< 

2.C 代码 6.3: N 后问题

代码如下

#include 
#include 
#include 

bool place(int* paraSolution, int paraT) {
	int j;
	for (j = 1; j < paraT; j ++) {
		//检查是否在同一列上或者在同一对角线上
		//1.判断同一列:之前放置的皇后与正准备放置的列号是否相同(列号=quenn[i] 的值)
		//2.判断对角线:正方形对角线斜率绝对值为 1;
		if ((abs(paraT - j) == abs(paraSolution[j] - paraSolution[paraT])) || (paraSolution[j] == paraSolution[paraT]))
			return false;
	}
	return true;
}

void backtracking(int* paraSolution, int paraN, int paraT) {
	int i;
	//如果该位置可以放置皇后且已经放置了N个皇后,打印方案即可
	if (paraT > paraN) {
		//确定当前行n,列号从 1 开始遍历
		for (i = 1; i <= paraN; i ++)
			printf("%d ", paraSolution[i]);
		printf("n");
	} else {
		//如果该位置不可以放置皇后,深度+1,行变为n+1;(显然n从 1 开始取)
		for (i = 1; i <= paraN; i ++) {
			paraSolution[paraT] = i;
			//判断该列能否放置皇后
			if (place(paraSolution, paraT)) {
				backtracking(paraSolution, paraN, paraT + 1);
			}
		}
	}
}

void nQueen(int paraN) {
	int i;
	int* solution = (int*)malloc((paraN + 1) * sizeof(int));
	for (i = 0; i <= paraN; i ++) {
		solution[i] = 0;
	}
	backtracking(solution, paraN, 1);
}
int main() {
	nQueen(5);
	return 1;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/934943.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号