zoukankan      html  css  js  c++  java
  • POJ 3414

    宝宝好激动、、、、A个题越来越不易了、、

    题意:很经典的小游戏,给你两个杯子和足够的水,问你能不能用这两个杯子量出题目中要求的水的容积;哈哈,有了这个程序以后玩这种小游戏就可以快速找到最佳方案啦啦啦啦

    方法,bfs搜索,搜索的对象是两个杯子的状态;每次只能进行一次操作,共有六种可能,用vis数组标记一下是否这种状态已经出现过

    get的新技能:如果要记录路径的话可以开一个数组,要记录字符串的话就是二维数组啦;

    宝宝写的代码:

    #include <stdio.h>
    #include <string.h>
    #include <queue>
    using namespace std;
    
    struct node
    {
        int x;
        int y;
        int z;
        char str[155][155];
    };
    int a,b,c;
    
    queue<node>q;
    
    void bfs()
    {
        int vis[111][111];
        memset(vis,0,sizeof(vis));
        vis[0][0]=1;
        while(!q.empty())
        {
            node n;
            n=q.front();
            q.pop();
            if(n.x==c||n.y==c)
            {
                printf("%d
    ",n.z);
                for(int i=1; i<=n.z; i++)
                {
                    printf("%s
    ",n.str[i]);
                }
                return ;
            }
            node k;
            k=n;
            k.x=0;
            k.z++;
            strcpy(k.str[k.z],"DROP(1)");
            if(vis[k.x][k.y]==0)
            {
                vis[k.x][k.y]=1;
                q.push(k);
            }
            k=n;
            k.y=0;
            k.z++;
            strcpy(k.str[k.z],"DROP(2)");
            if(vis[k.x][k.y]==0)
            {
                vis[k.x][k.y]=1;
                q.push(k);
            }
            k=n;
            k.x=a;
            k.z++;
            strcpy(k.str[k.z],"FILL(1)");
            if(vis[k.x][k.y]==0)
            {
                vis[k.x][k.y]=1;
                q.push(k);
            }
            k=n;
            k.y=b;
            k.z++;
            strcpy(k.str[k.z],"FILL(2)");
            if(vis[k.x][k.y]==0)
            {
                vis[k.x][k.y]=1;
                q.push(k);
            }
            if((n.x + n.y)<a)
            {
                k=n;
                k.x= n.x + n.y;
                k.y=0;
                k.z++;
                strcpy(k.str[k.z],"POUR(2,1)");
            }
            else
            {
                k=n;
                k.x=a;
                k.y= n.y+n.x-a;
                k.z++;
                strcpy(k.str[k.z],"POUR(2,1)");
            }
            if(vis[k.x][k.y]==0)
            {
                vis[k.x][k.y]=1;
                q.push(k);
            }
            if((n.y+n.x)<b)
            {
                k=n;
                k.y=n.x + n.y;
                k.x=0;
                k.z++;
                strcpy(k.str[k.z],"POUR(1,2)");
            }
            else
            {
                k=n;
                k.y=b;
                k.x=n.x+n.y-b;
                k.z++;
                strcpy(k.str[k.z],"POUR(1,2)");
            }
            if(vis[k.x][k.y]==0)
            {
                vis[k.x][k.y]=1;
                q.push(k);
            }
        }
        printf("impossible
    ");
        return ;
    }
    
    int main()
    {
        while(~scanf("%d%d%d",&a,&b,&c))
        {
            node n1;
            n1.x=a;
            n1.y=0;
            strcpy(n1.str[1],"FILL(1)");
            node n2;
            n2.x=0;
            n2.y=b;
            strcpy(n2.str[1],"FILL(2)");
            n1.z=1;
            n2.z=1;
            q.push(n1);
            q.push(n2);
            bfs();
        }
        return 0;
    }
  • 相关阅读:
    Tomcat应用中post方式传参数长度限制
    关于动态生成data组件
    H5 App开发用WeX5垃圾 试用一周,我果断放弃了wex5
    windowDialog销毁页面的问题
    WeX5之xid相关API
    ADB工具 获取ROOT权限及复制文件方法
    Android中使用am命令实现在命令行启动程序详解
    SQLite加密的方法(c#)
    C# Winform中如何让PictureBox的背景透明
    Android Camera API2中采用CameraMetadata用于从APP到HAL的参数交互
  • 原文地址:https://www.cnblogs.com/qioalu/p/5198529.html
Copyright © 2011-2022 走看看