主页 > 世涛 > 帝国世涛

c语言程序设计:分酒问题某人有12品脱的酒一瓶,想从中倒出6品脱.....

啤酒之家 2023-01-25 09:01 编辑:admin 216阅读

#include <iostream>

using namespace std;

int V[3]={12,8,5};

int src[6] ={0,0,1,1,2,2};

int dest[6]={1,2,0,2,0,1};

int record[100][3];

int rec_index=0;

void Pour(int state[],int a,int b)

{

int r=V[b]-state[b];

if(state[a]<r) {state[b]+=state[a];state[a]=0;}

else {state[b]=V[b];state[a]-=r;}

}

void Output()

{

printf( A B C\n);

for(int i=0;i<rec_index;++i)

printf(%4d %4d %4d\n,record[i][0],record[i][1],record[i][2]);

printf(\n\n);

}

void Record(int state[])

{

record[rec_index][0]=state[0];

record[rec_index][1]=state[1];

record[rec_index][2]=state[2];

++rec_index;

}

bool Exist(int state[])

{

for(int i=0;i<rec_index;++i)

if (state[0]==record[i][0]

&& state[1]==record[i][1]

&& state[2]==record[i][2])

return true;

return false;

}

void Solve(int state[])

{

int a=state[0],b=state[1],c=state[2];

Record(state);

if(a==6 && b==6 && c==0) {Output();return;}

for(int i=0;i<6;++i)

{

if(state[src[i]]==0) continue;

Pour(state,src[i],dest[i]);

if(!Exist(state))

{

Solve(state);

--rec_index;

}

state[0]=a;state[1]=b;state[2]=c;

}

}

int main()

{

int init[3]={12,0,0};

Solve(init);

return 0;

}

下一篇:那些年我入过的坑:我喝过的百余款啤酒简评
上一篇:最后的晚餐 十三人分别是谁?