zoukankan      html  css  js  c++  java
  • [POJ] 1606 Jugs(BFS+路径输出)

    题目地址:http://poj.org/problem?id=1606

    广度优先搜索的经典问题,倒水问题。算法不需要多说,直接BFS,路径输出采用递归。最后注意是Special Judge

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<queue>
    using namespace std;
    const int K=1511;
    queue<int> Q;
    int c[K][K],ca,cb,N,ax,bx;
    char map[7][20]={
        {"fill A"},
        {"fill B"},
        {"empty A"},
        {"empty B"},
        {"pour A B"},
        {"pour B A"}
    };
    struct node {
        int x,y,step;
    } d[K][K];
    
    void init()
    {
        memset(c,0,sizeof(c));
        memset(d,0,sizeof(d));
    }
    void print(int xa,int xb)
    {
        if(xa==0 && xb==0) return ;
        print(d[xa][xb].x,d[xa][xb].y);
        printf("%s
    ",map[d[xa][xb].step]);
    }
    void bfs(int cax,int cbx,int N)
    {
        while(!Q.empty()) Q.pop();
        c[0][0]=1;
        Q.push(cax);Q.push(cbx);
        
        while(!Q.empty()) {
            int xa=Q.front(); Q.pop();
            int xb=Q.front(); Q.pop();
            
            if(xb==N ) {
                    print(xa,xb);
                    printf("success
    ");
                    break;
            }
            if(!c[ca][xb]){
                c[ca][xb]=1;
    
                d[ca][xb].x=xa;
                d[ca][xb].y=xb;
                d[ca][xb].step=0;
                
                Q.push(ca);
                Q.push(xb);
            }
            if(!c[xa][cb]){
                c[xa][cb]=1;
                
                d[xa][cb].x=xa;
                d[xa][cb].y=xb;
                d[xa][cb].step=1;
                
                Q.push(xa);
                Q.push(cb);
            }
            if(!c[0][xb]){
                c[0][xb]=1;
                
                d[0][xb].x=xa;
                d[0][xb].y=xb;
                d[0][xb].step=2;
                
                Q.push(0);
                Q.push(xb);
            }
            if(!c[xa][0]){
                c[xa][0]=1;
                
                d[xa][0].x=xa;
                d[xa][0].y=xb;
                d[xa][0].step=3;
                    
                Q.push(xa);
                Q.push(0);
            }
    
            if(xa<=cb-xb){
                if(!c[0][xb+xa]){
                    c[0][xb+xa]=1;
                    
                    d[0][xb+xa].x=xa;
                    d[0][xb+xa].y=xb;
                    d[0][xb+xa].step=4;
                    
                    Q.push(0);
                    Q.push(xb+xa);
                }
            } else {
                if(xa-(cb-xb)>=0 && !c[xa-(cb-xb)][cb]){
                    c[xa-(cb-xb)][cb]=1;
                    
                    d[xa-(cb-xb)][cb].x=xa;
                    d[xa-(cb-xb)][cb].y=xb;
                    d[xa-(cb-xb)][cb].step=4;
                    
                    Q.push(ca-(cb-xb));
                    Q.push(cb);
                }
            }
    
            if(xb<=ca-xa){
                if(!c[xa+xb][0]){
                    c[xa+xb][0]=1;
                    
                    d[xa+xb][0].x=xa;
                    d[xa+xb][0].y=xb;
                    d[xa+xb][0].step=5;
                    
                    Q.push(xa+xb);
                    Q.push(0);
                }
            } else {
                if(xb-(ca-xa)>=0 && !c[ca][xb-(ca-xa)]){
                    c[ca][xb-(ca-xa)]=1;
                    
                    d[ca][xb-(ca-xa)].x=xa;
                    d[ca][xb-(ca-xa)].y=xb;
                    d[ca][xb-(ca-xa)].step=5;
                    
                    Q.push(ca);
                    Q.push(xb-(ca-xa));
                }
            }
        }
        
    }
    int main()
    {
        
        while(~scanf("%d%d%d",&ca,&cb,&N)){
              init();
              bfs(0,0,N);
            
        }
        
        
        return 0;
    }
  • 相关阅读:
    防抖与节流
    两台电脑互联
    es6标签模板转义html
    vue[mini-css-extract-plugin]Conflicting order between 警告解决方式(转载)
    如何解决Windows10处于通知模式(转载)
    hexo与github page搭建博客
    缓动类型参考
    微信代扣-免密支付 开通教程
    Linux服务器安全配置
    在linux (centos)上使用puppeteer实现网页截图
  • 原文地址:https://www.cnblogs.com/sxiszero/p/5258510.html
Copyright © 2011-2022 走看看