zoukankan      html  css  js  c++  java
  • 非常可乐 HDU1495

    #include<iostream>
    #include<algorithm>
    #include<math.h>
    #include<stdlib.h>
    #include<string.h>
    #include<stdio.h>
    #include<ctype.h>
    #include<limits.h>
    #include<queue>
    #include<stack>
    using namespace std;
    #define max(a, b) a>b?a:b
    #define min(a, b) a<b?a:b
    #define N 110
    typedef struct maze
    {
        int a, b, c, step;
    } MAZE;
    int s, n, m, visit[N][N][N];
    void BFS();
    int main()
    {
        while(scanf("%d%d%d", &s, &n, &m), s+n+m)
        {
            if(s%2!=0)
                printf("NO
    ");
            else
                BFS();
        }
        return 0;
    }
    void BFS()
    {
        queue<MAZE>que;
        memset(visit, 0, sizeof(visit));
        MAZE p, q;
        p.a=s;
        p.b=0;
        p.c=0;
        p.step=0;
        visit[p.a][p.b][p.c]=1;
        que.push(p);
        while(!que.empty())
        {
            p=que.front();
            que.pop();
            if((p.a==p.b&&p.c==0)||(p.a==p.c&&p.b==0)||(p.b==p.c&&p.a==0))
            {
                printf("%d
    ", p.step);
                return;
            }
            q=p;
            if(p.a!=0)
            {
                if(p.a>n-p.b)//也就是说p.a还有剩余
                {
                    //q= (MAZE) {p.a-n+p.b, n, p.c, p.step+1};
                    q.a=p.a-n+p.b;
                    q.b=n;
                    q.c=p.c;
                    q.step=p.step+1;
                }
                else
                {
                    //q= (MAZE) {0, p.a+p.b, p.c, p.step+1};
                    q.a=0;
                    q.b=p.a+p.b;
                    q.c=p.c;
                    q.step=p.step+1;
                }
                if(visit[q.a][q.b][q.c]==0)
                {
                    visit[q.a][q.b][q.c]=1;
                    que.push(q);
                }
                if(p.a>m-p.c)//也就是说p.a还有剩余
                {
                    // q=(MAZE) {p.a-m+p.c, p.b, m, p.step+1};
                    q.a=p.a-m+p.c;
                    q.b=p.b;
                    q.c=m;
                    q.step=p.step+1;
                }
                else
                {
                    // q= (MAZE) {0, p.b, p.c+p.a, p.step+1};
                    q.a=0;
                    q.b=p.b;
                    q.c=p.c+p.a;
                    q.step=p.step+1;
                }
                if(visit[q.a][q.b][q.c]==0)
                {
                    visit[q.a][q.b][q.c]=1;
                    que.push(q);
                }
            }
            if(p.b!=0)
            {
                if(p.b>s-p.a)//也就是说p.b还有剩余
                {
                    //q= (MAZE) {s, p.b-s+p.a, p.c, p.step+1};
                    q.a=s;
                    q.b=p.b-s+p.a;
                    q.c=p.c;
                    q.step=p.step+1;
                }
                else
                {
                    //q= (MAZE) {p.a+p.b, 0, p.c, p.step+1};
                    q.a=p.a+p.b;
                    q.b=0;
                    q.c=p.c;
                    q.step=p.step+1;
                }
                if(visit[q.a][q.b][q.c]==0)
                {
                    visit[q.a][q.b][q.c]=1;
                    que.push(q);
                }
                if(p.b>m-p.c)//也就是说p.b还有剩余
                {
                    //q= (MAZE) {p.a, p.b-m+p.c, m, p.step+1};
                    q.a=p.a;
                    q.b=p.b-m+p.c;
                    q.c=m;
                    q.step=p.step+1;
                }
                else
                {
                    // q= (MAZE) {p.a, 0, p.c+p.b, p.step+1};
                    q.a=p.a;
                    q.b=0;
                    q.c=p.c+p.b;
                    q.step=p.step+1;
                }
                if(visit[q.a][q.b][q.c]==0)
                {
                    visit[q.a][q.b][q.c]=1;
                    que.push(q);
                }
            }
            if(p.c!=0)
            {
                if(p.c>s-p.a)//也就是说p.c还有剩余
                {
                    //q= (MAZE) {s, p.b, p.c-s+p.a, p.step+1};
                    q.a=s;
                    q.b=p.b;
                    q.c=p.c-s+p.a;
                    q.step=p.step+1;
                }
                else
                {
                    // q= (MAZE) {p.a+p.c, p.b, 0. p.step+1};
                    q.a=p.a+p.c;
                    q.b=p.b;
                    q.c=0;
                    q.step=p.step+1;
                }
                if(visit[q.a][q.b][q.c]==0)
                {
                    visit[q.a][q.b][q.c]=1;
                    que.push(q);
                }
                if(p.c>n-p.b)//也就是说p.c 还有剩余
                {
                    //q= (MAZE) {p.a, n, p.c+p.b-n, p.step+1};
                    q.a=p.a;
                    q.b=n;
                    q.c=p.c+p.b-n;
                    q.step=p.step+1;
                }
                else
                {
                    //q= (MAZE){p.a, p.b+p.c, 0, p.step+1};
                    q.a=p.a;
                    q.b=p.b+p.c;
                    q.c=0;
                    q.step=p.step+1;
                }
                if(visit[q.a][q.b][q.c]==0)
                {
                    visit[q.a][q.b][q.c]=1;
                    que.push(q);
                }
            }
        }
        printf("NO
    ");
    }
     
  • 相关阅读:
    ORA-01861: 文字与格式字符串不匹配
    Tomcat启动失败Unrecognized Windows Sockets error: 0: JVM_Bind
    登陆数据库,界面一直保持正在登陆的状态,oracle使用界面无法登陆
    java.sql.SQLException: 关闭的连接
    如何提高家庭宽带的网速?
    打爆IPv4的不一定是IPv6,可能是中国互联网!
    LibreOffice 7.0.1 发布,开源办公套件
    iPhone12系列售价曝光
    TikTok正式起诉特朗普政府
    WordPress主题ripro 6.6
  • 原文地址:https://www.cnblogs.com/wazqWAZQ1/p/4663393.html
Copyright © 2011-2022 走看看