标题:求大神分析这个程序的原理
取消只看楼主
神话归来99
Rank: 1
等 级:新手上路
帖 子:5
专家分:5
注 册:2012-9-7
结帖率:0
已结贴  问题点数:20 回复次数:1 
求大神分析这个程序的原理
题目:
某人有12品脱的酒一瓶,想从中倒出6品脱,但他没有6品脱的容器,仅有一个8品脱和5品脱的容器,设计一个程序输出每一步的分法将啤酒分为两个6品脱。
代码  求大神分析
#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;
}
搜索更多相关主题的帖子: include record 
2013-03-05 08:54
神话归来99
Rank: 1
等 级:新手上路
帖 子:5
专家分:5
注 册:2012-9-7
得分:0 
求讲解啊  
2013-03-05 09:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-399776-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016469 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved