poj 1835 宇航员 模拟题

本文介绍了一个复杂的移动算法,该算法能够根据不同的方向指令,在三维空间中精确地移动坐标。通过定义24个方向,算法实现了从一个初始位置出发,根据输入的方向字符串进行精确的三维坐标移动。

写的时候思路很清晰,以面对的方向和它的右边为标准,这样写24个方向出来,不过代码量太大了,后来看了别人的思路后,原来可以写的这么简短!

不过还是纪念下自己这个又臭又长的代码吧..

View Code
#include <stdio.h>
#define x1 0
#define y1 1
#define z1 2
#define x2 3
#define y2 4
#define z2 5

int x,y,z,a,b,m;
char str[10];

void h()
{
if(a>=3)m=-m;
if(a==0||a==3)x+=m;
if(a==1||a==4)y+=m;
if(a==2||a==5)z+=m;
}

int g()
{
if(str[0]=='l')return 0;
else if(str[0]=='r')return 1;
else if(str[0]=='u')return 2;
else if(str[0]=='d')return 3;
else if(str[0]=='f')return 4;
else if(str[0]=='b')return 5;
}

void X1Y1()
{
int c;
int ar[7][2]={{y2,x1},{y1,x2},{z1,y1},{z2,y1},{x1,y1},{x2,y2}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
};

void X1Z1()
{
int c;
int ar[7][2]={{z2,x1},{z1,x2},{y2,z1},{y1,z1},{x1,z1},{x2,z2}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
};

void X1Y2()
{
int c;
int ar[7][2]={{y1,x1},{y2,x2},{z2,y2},{z1,y2},{x1,y2},{x2,y1}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void X1Z2()
{
int c;
int ar[7][2]={{z1,x1},{z2,x2},{y1,z2},{y2,z2},{x1,z2},{x2,z1}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void Y1X1()//
{
int c;
int ar[7][2]={{x2,y1},{x1,y2},{z2,x1},{z1,x1},{y1,x1},{y2,x2}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void Y1Z1()//
{
int c;
int ar[7][2]={{z2,y1},{z1,y2},{x1,z1},{x2,z1},{y1,z1},{y2,z2}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void Y1X2()//
{
int c;
int ar[7][2]={{x1,y1},{x2,y2},{z1,x2},{z2,x2},{y1,x2},{y2,x1}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void Y1Z2()
{
int c;
int ar[7][2]={{z1,y1},{z2,y2},{x2,z2},{x1,z2},{y1,z2},{y2,z1}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void Z1X1()
{
int c;
int ar[7][2]={{x2,z1},{x1,z2},{y1,x1},{y2,x1},{z1,x1},{z2,x2}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void Z1Y1()
{
int c;
int ar[7][2]={{y2,z1},{y1,z2},{x2,y1},{x1,y1},{z1,y1},{z2,y2}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void Z1X2()
{
int c;
int ar[7][2]={{x1,z1},{x2,z2},{y2,x2},{y1,x2},{z1,x2},{z2,x1}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void Z1Y2()
{
int c;
int ar[7][2]={{y1,z1},{y2,z2},{x1,y2},{x2,y2},{z1,y2},{z2,y1}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();

}

void X2Y1()
{
int c;
int ar[7][2]={{y2,x2},{y1,x1},{z2,y1},{z1,y1},{x2,y1},{x1,y2}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void X2Z1()
{
int c;
int ar[7][2]={{z2,x2},{z1,x1},{y1,z1},{y2,z1},{x2,z1},{x1,z2}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}


void X2Y2()
{
int c;
int ar[7][2]={{y1,x2},{y2,x1},{z1,y2},{z2,y2},{x2,y2},{x1,y1}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void X2Z2()
{
int c;
int ar[7][2]={{z1,x2},{z2,x1},{y2,z2},{y1,z2},{x2,z2},{x1,z1}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void Y2X1()
{
int c;
int ar[7][2]={{x2,y2},{x1,y1},{z1,x1},{z2,x1},{y2,x1},{y1,x2}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void Y2Z1()
{
int c;
int ar[7][2]={{z2,y2},{z1,y1},{x2,z1},{x1,z1},{y2,z1},{y1,z2}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void Y2X2()
{
int c;
int ar[7][2]={{x1,y2},{x2,y1},{z2,x2},{z1,x2},{y2,x2},{y1,x1}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void Y2Z2()//
{
int c;
int ar[7][2]={{z1,y2},{z2,y1},{x1,z2},{x2,z2},{y2,z2},{y1,z1}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void Z2X1()
{
int c;
int ar[7][2]={{x2,z2},{x1,z1},{y2,x1},{y1,x1},{z2,x1},{z1,x2}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void Z2Y1()
{
int c;
int ar[7][2]={{y2,z2},{y1,z1},{x1,y1},{x2,y1},{z2,y1},{z1,y2}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();

}

void Z2X2()//
{
int c;
int ar[7][2]={{x1,z2},{x2,z1},{y1,x2},{y2,x2},{z2,x2},{z1,x1}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void Z2Y2()//
{
int c;
int ar[7][2]={{y1,z2},{y2,z1},{x2,y2},{x1,y2},{z2,y2},{z1,y1}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

int main()
{
int T,n,i;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
a=x1;b=y1;
x=y=z=0;
for (i=0;i<n;i++)
{
scanf("%s%d",str,&m);
if(a==x1&&b==y1)X1Y1();
else if(a==x1&&b==z1)X1Z1();
else if(a==x1&&b==y2)X1Y2();
else if(a==x1&&b==z2)X1Z2();
else if(a==y1&&b==x1)Y1X1();
else if(a==y1&&b==z1)Y1Z1();
else if(a==y1&&b==x2)Y1X2();
else if(a==y1&&b==z2)Y1Z2();
else if(a==z1&&b==x1)Z1X1();
else if(a==z1&&b==y1)Z1Y1();
else if(a==z1&&b==x2)Z1X2();
else if(a==z1&&b==y2)Z1Y2();
else if(a==x2&&b==y1)X2Y1();
else if(a==x2&&b==z1)X2Z1();
else if(a==x2&&b==y2)X2Y2();
else if(a==x2&&b==z2)X2Z2();
else if(a==y2&&b==x1)Y2X1();
else if(a==y2&&b==z1)Y2Z1();
else if(a==y2&&b==x2)Y2X2();
else if(a==y2&&b==z2)Y2Z2();
else if(a==z2&&b==x1)Z2X1();
else if(a==z2&&b==y1)Z2Y1();
else if(a==z2&&b==x2)Z2X2();
else if(a==z2&&b==y2)Z2Y2();
}
printf("%d %d %d %d\n",x,y,z,a);
}
return 0;
}



 

转载于:https://www.cnblogs.com/104-gogo/archive/2011/12/15/2289555.html

内容概要:本文围绕含氢气氨气的综合能源系统优化调度展开研究,提出了一种基于Matlab的仿真建模与优化方法,旨在实现多能互补、高效利用与低碳运行。研究构建了包含风能、太阳能、电解水制氢、氢气储存、氢合成氨、氨储存及能源转换设备在内的综合能源系统架构,重点考虑了氢、氨作为二次能源载体在能量存储与转化中的关键作用。通过建立系统各组件的数学模型,如电解槽效率模型、合成氨反应动力学模型、储氢储氨容量模型等,并结合可再生能源出力不确定性、负荷需求波动等因素,构建了以系统运行成本最小化、碳排放最小化或多目标综合最优为目标的优化调度模型。采用智能优化算法(如改进粒子群算法、多目标优化算法等)对模型进行求解,实现了对系统中各类设备出力、储能充放电状态、能量交互功率等变量的精细化调度,有效提升了能源利用效率与系统经济性。; 适合人群:具备一定电力系统、能源工程或自动化专业背景,熟悉Matlab/Simulink仿真工具,从事新能源、综合能源系统、氢能等领域研究的研发人员、研究生及高年级本科生。; 使用场景及目标:① 为含氢、氨等新型能源载体的综合能源系统规划设计提供理论依据技术支撑;② 实现对风光等波动性可再生能源的高效消纳,提高系统灵活性与可靠性;③ 通过优化调度降低系统运行成本与碳排放强度,服务于“双碳”战略目标。; 阅读建议:此资源以Matlab代码实现为核心,提供了完整的仿真模型与优化算法代码,学习者应结合相关专业知识,深入理解模型构建的物理意义与数学表达,调试并运行代码以掌握其工作流程,进而可根据实际需求对模型进行扩展与改进。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值