莫顿曲线映射 一维到二维的变换 MD(莫顿)码 反向变换 线性四叉树

莫顿曲线映射 一维到二维的变换 MD(莫顿)码 反向变换 线性四叉树_第1张图片莫顿曲线映射 一维到二维的变换 MD(莫顿)码 反向变换 线性四叉树_第2张图片

函数声明: 

#include 
#include 

#define MAXSIZE 200
#define N 8

typedef struct          //栈的存储结构
{
    int data[MAXSIZE];
    int MD[MAXSIZE];
    int top;
}stack1;

void stackinitiate(stack1 *s);          //初始化栈
void push (stack1 *s,int e,int n) ;     //入栈
int getlines(int md);                     //获得行
int getrow(int md); 					 //获得列
int getbinary(int md); 					//由十进制MD码,获得二进制MD码
void pri(int (*p)[N]);					//打印二维数组

算法实现: 

int main()
{
	int v[N][N];
	stack1 a={{0,1,0,2,4,2,2,0,0,2,2,0,0,0,0,4},{0,4,8,12,16,32,33,34,35,36,37,38,39,40,44,48},16};   //讲PPT上的示例数据填入栈内
	stack1 b;
	stackinitiate(&b);
	for(int i=0;i

 函数实现:

void push (stack1 *s,int e,int n)         //入栈
{
	s->MD[s->top]=e;
	s->data[s->top]=n;
	s->top++;
	
}

int getlines(int md)             //获得行
{
	int res=0;
	int i=0;
	while(md){
		md/=10;
		res+=md%10*pow(2,i++);
		md/=10;
	}
	return res;
}

int getrow(int md)				 //获得列
{
	int res=0;
	int i=0;
	while(md){
		res+=md%10*pow(2,i++);
		md/=100;
	}
	return res;
}

int getbinary(int md)            //获得二进制MD码
{
	double res=0;
	int i=0;
	while(md){
		int temp=md%2;
		res+=temp*pow(10,i++);
		md=md/2;
	}
	return res;
}

void pri(int (*p)[N])                 //打印
{
	for(int i=0;itop=0;
}

 结果:

莫顿曲线映射 一维到二维的变换 MD(莫顿)码 反向变换 线性四叉树_第3张图片莫顿曲线映射 一维到二维的变换 MD(莫顿)码 反向变换 线性四叉树_第4张图片

中间的函数是用蠢方法写出来的,位运算的实现在这:http://t.csdn.cn/4rUDA

 

 

 

你可能感兴趣的:(java,开发语言)