数据结构--立体层次结构

本文介绍了一个使用C++实现的三维空间结构模拟程序。该程序通过构建房间节点来模拟建筑物的框架结构,每个节点包含东南西北及上下方向的链接,并实现了顺逆时针互联。文章详细阐述了如何通过循环构建子集并进一步构建超集,最终形成完整的三维结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// roomage.cpp: 主项目文件。

#include "stdafx.h"
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
unsigned int sand(unsigned int (time(0) ) );
/*   按原理来说是可以运用递归实现的,貌似很复杂*/
//template<typename T>
struct room
{
	int  val;
	struct room *east;//东
	struct room *south;//南
	struct room *west;//西
	struct room *north;//北
	struct room *up;//上
	struct room *down;//下
	struct room *seq;//顺时针方向
	struct room *ant;//逆时针方向
};//定义一个节点
room* create(int num );
room* huge_create( int num, room* po );
//void out( room* ph );

int main(array<System::String ^> ^args)
{
	cout<<"enter number of node on four direction "<<endl;
	int num;
	cin>>num;
	room *po=create( num );
	//cout<<sizeof(po)<<endl;//test
	cout<<"enter number of node on level direction "<<endl;
	int size;
	cin>>size;
	room* ph=huge_create( size, po );
	//out( ph );
	
	这段测试代码证明返回结果正确,说明主链构建成功,子集上的顺逆互联构建成功
	//cout<<ph->east->val<<endl;
	//cout<<ph->east->up->val<<endl;
	//cout<<ph->east->east->down->seq->ant->val<<endl;
	//cout<<ph->east->east->down->down->west->val<<endl;// 这段代码证明下面标注的Bug在运行阶段的确出现
	system("pause");
    return 0;
}
 room* create( int num  ) //构建上下北南子集,顺逆方向互联
{
	static room *p=new room;
	p->val=1000;
	p->east=p->south =p->west=p->north=p->up=p->down=p->ant=p->seq=NULL;

	room *pu=p, *pd=p, *pn=p, *ps=p;
	for ( int i=0; i<=num; ++i )
	{
		room *pu_tmp=new room; //up
		pu_tmp->val=200+rand()%200;
		pu->up=pu_tmp; pu_tmp->down=pu;
		
		room *pd_tmp=new room;//down
		pd_tmp->val=400+rand()%200;
		pd->down=pd_tmp; pd_tmp->up=pd;

		room *pn_tmp=new room;//north
		pn_tmp->val=600+rand()%200;
		pn->north=pn_tmp; pn_tmp->south=pn;

		room *ps_tmp=new room;//south
		ps_tmp->val=800+rand()%200;
		ps->south =ps_tmp; ps_tmp->north=ps;

		pu=pu->up; pd=pd->down; pn=pn->north; ps=ps->south;

		pu->seq=pn; pn->ant=pu;//顺、逆时针方向互联
		pn->seq=pd; pd->ant=pn;//顺、逆时针方向互联
		pd->seq=ps; ps->ant=pd;//顺、逆时针方向互联
		ps->seq=pu; pu->ant=ps;//顺、逆时针方向互联
	}
	return p;
}
room* huge_create( int size, room* po )
{	room *pf=po;
	for ( int i=0; i<=size; ++i )//构建超集,将子集从东向西构建
	{
		room *pt=create( size );
		//cout<<sizeof(pt)<<endl;//test
		pf->west=pt; pt->east=pf;//将原超集最西边方向的个体子集与新建的子集用west指针互联

   //这段代码出现Bug
		room *pfu=pf->up, *pfd=pf->down, *pfn=pf->north, *pfs=pf->south;//上下北南方向
		room *ptu=pt->up, *ptd=pt->down, *ptn=pt->north, *pts=pt->south;//上下北南方向
		while ( pfu && pfd && pfn && pfs && ptu && ptd && ptn && pts ) //相邻的自己各节点东西互联
		{
			pfu->west=ptu; ptu->east=pfu;//东西方向互联(上)
			pfd->west=ptd; ptd->east=pfd;//东西方向互联(下)
			pfn->west=ptn; ptn->east=pfn;//东西方向互联(北)
			pfs->west=pts;  pts->east=pfs;//东西方向互联(南)

			pfu=pfu->up; pfd=pfd->down;//指针上下移动
			pfn=pfn->north; pfs=pfs->south;//指针南北移动
			ptu=ptu->up; ptd=ptd->down;
			ptn=ptn->north; pts=pts->south;
		}//while   
		pf=pf->west;//从东向西构建
	}//for
	return pf;
}
//void out( room* ph )
//{
//	while ( ph )
//	{
//		cout<<ph->val<<"  ";
//		ph=ph->east;
//	}
//}
/*
//这也是一种思路
 class Single
 {
 private:
	 room s_obj;
 };
 class Huge : public Single
 {
 };
*/
说明: 结点包含平面的东南西北指针,和垂直于东南西北的上下指针,以及东南西北扩展上的顺逆时针方向互联。这样构建成一个子集,通过循环构建超集,并且子集之间的单个结点实现互联,形成建筑物的框架结构,由第一层,依次往上攀升。按说可以递归实现,我做成了循环实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值