人工智能程序作业
八字码问题
计算机日语强化0801
张璨
200881723
运行环境codeblocks(不知道VC上是否可用)#include
#include
#include
#include
using namespace std;
structhh
{
int map[10];
intzt;
intkong;
intqian;
}queue[1000000];
intjcs[10];
bool visit[1000000];
intgetzt(int map[])
{
intzt=0,i,j;
for(i=0;i<9;++i)
{
int s=0;
for(j=i+1;j<9;++j)
{
if(map[i]>map[j])s++;
}
zt+=s*jcs[map[i]];
}
returnzt;
}
void copy(intaa[],int b[])
{
int i;
for(i=0;i<9;++i)
{
aa[i]=b[i];
}
}
{
freopen("in.txt","r",stdin);
inti,j;
jcs[0]=1;
for(i=1;i<9;++i)jcs[i]=jcs[i-1]*i;
intmubiao[10]={1,2,3,8,0,4,7,6,5};
printf("请输入八字码问题的初始状态(空白用0):\n"); int map[10];
for(i=0;i<9;++i)scanf("%d",&map[i]);
int head=0,end=1;
intczt=getzt(map);
for(i=0;i<9;++i)
{
queue[0].map[i]=map[i];
if(map[i]==0)queue[0].kong=i;
}
queue[0].zt=czt;
queue[0].qian=-1;
visit[czt]=1;
intmzt=getzt(mubiao);
while(head { //cout< hhdq=queue[head]; if(dq.zt==mzt)break; intlmap[10]; if(dq.kong>2) { copy(lmap,dq.map); lmap[dq.kong]=lmap[dq.kong-3]; lmap[dq.kong-3]=0; intxzt=getzt(lmap); if(!visit[xzt]) { copy(queue[end].map,lmap); queue[end].zt=xzt; queue[end].kong=dq.kong-3; queue[end++].qian=head; visit[xzt]=1; } } if(dq.kong<6) copy(lmap,dq.map); lmap[dq.kong]=lmap[dq.kong+3]; lmap[dq.kong+3]=0; intxzt=getzt(lmap); if(!visit[xzt]) { copy(queue[end].map,lmap); queue[end].zt=xzt; queue[end].kong=dq.kong+3; queue[end++].qian=head; visit[xzt]=1; } } if(dq.kong%3>0) { copy(lmap,dq.map); lmap[dq.kong]=lmap[dq.kong-1]; lmap[dq.kong-1]=0; intxzt=getzt(lmap); if(!visit[xzt]) { copy(queue[end].map,lmap); queue[end].zt=xzt; queue[end].kong=dq.kong-1; queue[end++].qian=head; visit[xzt]=1; } } if(dq.kong%3<2) { copy(lmap,dq.map); lmap[dq.kong]=lmap[dq.kong+1]; lmap[dq.kong+1]=0; intxzt=getzt(lmap); if(!visit[xzt]) { copy(queue[end].map,lmap); queue[end].zt=xzt; queue[end].kong=dq.kong+1; queue[end++].qian=head; } } head++; } // cout< if(head==end) { printf("对不起,无解!\n"); } int stack[100000],top=0; int pre=head; do{ stack[top++]=pre; pre=queue[pre].qian; }while(queue[pre].qian!=-1); printf("通过%d 步移动成功!步骤为:\n",top); for(i=--top;i>=0;--i) { for(j=0;j<9;++j) { printf("%d ",queue[stack[i]].map[j]); if(j%3==2)printf("\n"); } printf("\n"); } return 0; } 张一勺《揭开密中秘》节选 第一部分命理基础知识 第一节命理基本构成要素 一、阴阳五行 古代人们通过对世界的观察,认为世界万物分两类即阴阳,如日月、男女、雄雌、光明、黑暗、正面、反面等,并并且阴阳是既相互对立又相互统一的。两者之间又在相互转化,人们对阴阳的认识形成了一种理论叫阴阳学说。 阴阳的相互转化的运动变化过程之中,产生了五种物质,通过五种自然物质的配合变化运动,相互作用才产生了很多很多不同类型的新的物质,这五种物质是金木水火土,是最古老最根本的五种基本原素,一切物质的基础都是五行在特定的条件下转化而来。 五行的生克关系 五行相生表现为,木生火,火生土,土生金,金生水,五行相克;表现为,金克木,木克土,土克水,水克火,火克金,五行相生相克的原理; 一、五行相生:指木生火,火生土,土生金,金生水,水生木。 (1)、木性温暖,火仗其中,钻灼而生,故木生火。 (2)、火生土者,是因为火热故能焚木,木焚成灰,灰洒土地变成土,故火生土。 (3)、土生金者,金据石依山,津润而生,聚土成山,土必生石,故土生金。 (4)、金生水者,是因为少阴之气,温润流泽,销火断金,也可变为水,所以金生水。 (5)、水生木,因为水温润使树木生长茁壮。 二、五行相克指,金克木,木克土,土克水,水克火,火克金, (1)众胜寡,水胜火, (2)精胜坚,故火胜金 (3)刚胜柔,故金胜木, (4)专胜散,故木胜土, (5)实胜虚,故土胜水 三、五行过剩与反悔 五行不能太胜和不足,因为物极必反这点《命理约言》对无行的生克关系做了精辟的解释。 金:金旺得火方成器皿 金能生水,水多金沉,强金得水,方挫其锋。 金能克木,木多金缺,木弱逢金,必为坎坷。 金赖土生,土多金埋,土能生金,金多土变。 火:火旺得水,土多火悔强火得土,方止其焰。 火能克金,金多火息,金弱遇火,必见销熔。 火赖木生,木多火枳,木能生火,火多木焚。 水:水旺得土,方成池沼。 水能生木,木多水缩,强水得木,方泄其势。 水能克火,火多水干,火弱遇水必为息灭。 水赖金生,金多水浊,金能生水,水多金沉。八字基础知识教材1