zoukankan      html  css  js  c++  java
  • poj 3414(简单bfs)

    题目链接:http://poj.org/problem?id=3414

    思路:bfs简单应用,增对瓶A或者瓶B进行分析就可以了,一共6种状态。

      1 #include<iostream>
      2 #include<cstdio>
      3 #include<cstring>
      4 #include<algorithm>
      5 #include<queue>
      6 using namespace std;
      7 
      8 struct Node{
      9     int a,b,step;
     10     char str[111][111];
     11 };
     12 
     13 int A,B,C;
     14 bool mark[111][111];
     15 bool bfs()
     16 {
     17     memset(mark,false,sizeof(mark));
     18     queue<Node>que;
     19     Node p,q;
     20     p.a=0,p.b=0,p.step=0;
     21     que.push(p);
     22     mark[0][0]=true;
     23     while(!que.empty()){
     24         p=que.front();
     25         que.pop();
     26         if(p.a==C||p.b==C){
     27             printf("%d
    ",p.step);
     28             for(int i=1;i<=p.step;i++){
     29                 printf("%s
    ",p.str[i]);
     30             }
     31             return true;
     32         }
     33         if(p.a==0){
     34             q=p;
     35             q.a=A;
     36             q.step++;
     37             strcpy(q.str[q.step],"FILL(1)");
     38             if(!mark[q.a][q.b]){
     39                 mark[q.a][q.b]=true;
     40                 que.push(q);
     41             }
     42         }else if(p.a<=A){
     43             q=p;
     44             q.a=0;
     45             q.step++;
     46             strcpy(q.str[q.step],"DROP(1)");
     47             if(!mark[q.a][q.b]){
     48                 mark[q.a][q.b]=true;
     49                 que.push(q);
     50             }
     51             if(p.b<B){
     52                 q=p;
     53                 if(q.a+q.b<=B){
     54                     q.b+=q.a;
     55                     q.a=0;
     56                 }else {
     57                     q.a=(q.b+q.a)-B;
     58                     q.b=B;
     59                 }
     60                 q.step++;
     61                 strcpy(q.str[q.step],"POUR(1,2)");
     62                 if(!mark[q.a][q.b]){
     63                     mark[q.a][q.b]=true;
     64                     que.push(q);
     65                 }
     66             }
     67         }
     68         if(p.b==0){
     69             q=p;
     70             q.b=B;
     71             q.step++;
     72             strcpy(q.str[q.step],"FILL(2)");
     73             if(!mark[q.a][q.b]){
     74                 mark[q.a][q.b]=true;
     75                 que.push(q);
     76             }
     77         }else if(p.b<=B){
     78             q=p;
     79             q.b=0;
     80             q.step++;
     81             strcpy(q.str[q.step],"DROP(2)");
     82             if(!mark[q.a][q.b]){
     83                 mark[q.a][q.b]=true;
     84                 que.push(q);
     85             }
     86             if(p.a<A){
     87                 q=p;
     88                 if(q.b+q.a<=A){
     89                     q.a+=q.b;
     90                     q.b=0;
     91                 }else {
     92                     q.b=(q.b+q.a)-A;
     93                     q.a=A;
     94                 }
     95                 q.step++;
     96                 strcpy(q.str[q.step],"POUR(2,1)");
     97                 if(!mark[q.a][q.b]){
     98                     mark[q.a][q.b]=true;
     99                     que.push(q);
    100                 }
    101             }
    102         }
    103     }
    104     return false;
    105 }
    106 
    107 
    108 int main()
    109 {
    110     while(~scanf("%d%d%d",&A,&B,&C)){
    111         if(!bfs())puts("impossible");
    112     }
    113     return 0;
    114 }
    View Code
  • 相关阅读:
    1、编写一个简单的C++程序
    96. Unique Binary Search Trees
    python 操作redis
    json.loads的一个很有意思的现象
    No changes detected
    leetcode 127 wordladder
    django uwsgi websocket踩坑
    you need to build uWSGI with SSL support to use the websocket handshake api function !!!
    pyinstaller 出现str error
    数据库的读现象
  • 原文地址:https://www.cnblogs.com/wally/p/3294251.html
Copyright © 2011-2022 走看看