zoukankan      html  css  js  c++  java
  • hdoj1495简单BFS

    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <algorithm>
    #include <iostream>
    using namespace std;
    #define LL __int64
    #define mod 9973
    #define N 100010
    
    int n,m,s;
    
    bool vis[102][110][110];
    struct asd{
        int cup1;
        int cup2;
        int cup3;
        int step;
    };
    asd q[N];
    int head,tail;
    
    void bfs()
    {
        memset(vis,0,sizeof(vis));
    
        head=0;tail=1;
        q[head].cup1=s;
        q[head].cup2=0;
        q[head].cup3=0;
        q[head].step=0;
        vis[s][0][0]=1;
    
        int x,y,z;
        while(head<tail)
        {
            int a=q[head].cup1;
            int b=q[head].cup2;
            int c=q[head].cup3;
    
            if(a==b&&a==s/2)
            {
                printf("%d
    ",q[head].step);
                return;
            }
            //cup1->cup2|cup1->cup3|先cup1->cup2后cup1->cup3 
            if(a>0)
            {
                //cup1->cup2只能倒满,或者倒不满 
               //不会出现倒不满的现象,只会倒不倒;
                x=a-(n-b);
                y=n;
                z=c;
                if(!vis[x][y][z])
                {
                    vis[x][y][z]=1;
                    q[tail].cup1=x;
                    q[tail].cup2=y;
                    q[tail].cup3=z;
                    q[tail].step=q[head].step+1;
                    tail++;
                }
                x=0;
                y=n;
                z=m;
                if(!vis[x][y][z])
                {
                    vis[x][y][z]=1;
                    q[tail].cup1=x;
                    q[tail].cup2=y;
                    q[tail].cup3=z;
                    q[tail].step=q[head].step+1;
                    tail++;
                }
                x=(a-(m-c));    
                y=b;
                z=m;
                if(!vis[x][y][z])
                {
                    vis[x][y][z]=1;
                    q[tail].cup1=x;
                    q[tail].cup2=y;
                    q[tail].cup3=z;
                    q[tail].step=q[head].step+1;
                    tail++;
                }
            }
            //cup2->cup1|cup2->cup3|cup2->cup1;
            if(b>0)
            {
                x=a+b;
                y=0;
                z=c;
                if(!vis[x][y][z])
                {
                    vis[x][y][z]=1;
                    q[tail].cup1=x;
                    q[tail].cup2=y;
                    q[tail].cup3=z;
                    q[tail].step=q[head].step+1;
                    tail++;
                }
                if(b+c>=m)
                {
                    x=a;
                    y=b-(m-c);
                    z=m;
                    if(!vis[x][y][z])
                    {
                        vis[x][y][z]=1;
                        q[tail].cup1=x;
                        q[tail].cup2=y;
                        q[tail].cup3=z;
                        q[tail].step=q[head].step+1;
                        tail++;
                    }
                    x=s-m;
                    y=0;
                    z=m;
                    if(!vis[x][y][z])
                    {
                        vis[x][y][z]=1;
                        q[tail].cup1=x;
                        q[tail].cup2=y;
                        q[tail].cup3=z;
                        q[tail].step=q[head].step+1;
                        tail++;
                    }
                }
                else
                {
                    x=a;
                    y=0;
                    z=b+c;
                    if(!vis[x][y][z])
                    {
                        vis[x][y][z]=1;
                        q[tail].cup1=x;
                        q[tail].cup2=y;
                        q[tail].cup3=z;
                        q[tail].step=q[head].step+1;
                        tail++;
                    }
                }
            }
            //cup3->cup1|cup3->cup2\cup3->cup1
            if(c>0)
            {
                x=a+c;
                y=b;
                z=0;
                if(!vis[x][y][z])
                {
                    vis[x][y][z]=1;
                    q[tail].cup1=x;
                    q[tail].cup2=y;
                    q[tail].cup3=z;
                    q[tail].step=q[head].step+1;
                    tail++;
                }
                if(b+c>=n)
                {
                    x=a;
                    y=n;
                    z=c-(n-b);
                    if(!vis[x][y][z])
                    {
                        vis[x][y][z]=1;
                        q[tail].cup1=x;
                        q[tail].cup2=y;
                        q[tail].cup3=z;
                        q[tail].step=q[head].step+1;
                        tail++;
                    }
                    x=s-n;
                    y=n;
                    z=0;
                    if(!vis[x][y][z])
                    {
                        vis[x][y][z]=1;
                        q[tail].cup1=x;
                        q[tail].cup2=y;
                        q[tail].cup3=z;
                        q[tail].step=q[head].step+1;
                        tail++;
                    }
                }
                else
                {
                    x=a;
                    y=b+c;
                    z=0;
                    if(!vis[x][y][z])
                    {
                        vis[x][y][z]=1;
                        q[tail].cup1=x;
                        q[tail].cup2=y;
                        q[tail].cup3=z;
                        q[tail].step=q[head].step+1;
                        tail++;
                    }
                }
            }
            head++;
        }
        printf("NO
    ");
    }
    
    
    int main()
    {
        while(~scanf("%d%d%d",&s,&n,&m))
        {
            if(s==0&&n==0&&m==0)
                break;  
            if(n<m)
            {
                int temp=n;
                n=m;
                m=temp; 
            }
            if(n+m<s||n+m>s||s%2==1)
            {
                puts("NO");
                continue;
            }
            bfs();
        }
        return 0;
    }
  • 相关阅读:
    图片延迟加载(lazyload)的实现原理
    jquery lazyload延迟加载技术的实现原理分析
    目前为止用过的最好的Json互转工具类ConvertJson
    ASP.NET前台代码绑定后台变量方法总结
    使用MySql时会遇到中文乱码的问题
    asp.net 时间格式大全
    asp.net 记录用户打开和关闭页面的时间
    分页 排序 表格 多功能
    使用Jquery实现可编辑的表格 并使用AJAX提交到服务器修改数据
    Hive和Hbase
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934516.html
Copyright © 2011-2022 走看看