zoukankan      html  css  js  c++  java
  • dfs (状态划分)

    农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数,最初,A和B桶都是空的,而C桶是装满牛奶的。有时,约翰把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原桶空了。当然每一次灌注都是完全的。由于节约,牛奶不会有丢失。 写一个程序去帮助约翰找出当A桶是空的时候,C桶中牛奶所剩量的所有可能性。

    Input

    单独的一行包括三个整数A,B和C。

    Output

    只有一行,列出当A桶是空的时候,C桶牛奶所剩量的所有可能性。

    Sample Input

    8 9 10

    Sample Output

    1 2 8 9 10



    三个桶:每个桶都有两种状态,a>b,a>c,b>a,b>c,c>a,c>b;

    #include<queue>
    #include<cstdlib>
    #include<algorithm>
    #include<map>
    #include<cstring>
    #include<cmath>
    using namespace std;
    int vis[25][25][25]={0};
    int A,B,C;
    int ans[1000000]= {0};
    int t=0;
    void dfs(int a,int b,int c)
    {
        if(vis[a][b][c]==1)
            return ;
        else
            vis[a][b][c]=1;
        if(a==0)
            ans[t++]=c;
        if(A-a>=c)
            dfs(a+c,b,0);
        else
            dfs(A,b,c-A+a);
        if(B-b>=c)
            dfs(a,b+c,0);
        else
            dfs(a,B,c-B+b);
        if(B-b>=a)
            dfs(0,b+a,c);
        else
            dfs(a-B+b,B,c);
        if(C-c>=a)
            dfs(0,b,c+a);
        else
            dfs(a-C+c,b,C);
        if(A-a>=b)
            dfs(a+b,0,c);
        else
            dfs(A,b-A+a,c);
        if(C-c>=b)
            dfs(a,0,c+b);
        else
            dfs(a,b-C+c,C);
    }
    int main()
    {
        int i;
        scanf("%d%d%d",&A,&B,&C);
        dfs(0,0,C);
        sort(ans,ans+t);
        for(i=0; i<=t-1; i++)
        {
            if(i==0)
            {
                if(t==1)
                    printf("%d
    ",ans[0]);
                else
                    printf("%d ",ans[0]);
                continue;
            }
            if(i!=t-1)
            {
                if(ans[i]!=ans[i-1])
                    printf("%d ",ans[i]);
            }
            else
            {
                if(ans[i]!=ans[i-1])
                    printf("%d
    ",ans[i]);
            }
        }
    }
  • 相关阅读:
    柯乐义关灯效果
    柯乐义高级弹出菜单(可以有三级菜单)
    柯乐义图片压缩类
    JS在textarea光标处插入文本
    EntityFramework实例
    【Java学习笔记】读取URL
    【Java学习笔记】编码学习
    【Java学习笔记】本地化
    【Java学习笔记】操作JAR文件
    【Java6学习笔记】多线程编程中使用volatile保障原子性
  • 原文地址:https://www.cnblogs.com/bhd123/p/9676088.html
Copyright © 2011-2022 走看看