• poj 1606


    http://poj.org/problem?id=1606

    题意:有两个容量为a,b的被子,用这两个被子量出c的水。

    思路:bfs和记录路径

      1 #include <stdio.h>
      2 #include <string.h>
      3 #include <queue>
      4 
      5 using namespace std;
      6 struct Node{
      7     int pre,a,b;
      8     int num,f;
      9 }node[2000000];
     10 int pos;
     11 queue<Node>s;
     12 bool mark[500][500];
     13 
     14 void print(int t)
     15 {
     16     switch(t)
     17     {
     18         case 1:
     19             printf("fill A
    ");
     20             break;
     21         case 2:
     22             printf("fill B
    ");
     23             break;
     24         case 3:
     25             printf("empty A
    ");
     26             break;
     27         case 4:
     28             printf("empty B
    ");
     29             break;
     30         case 5:
     31             printf("pour A B
    ");
     32             break;
     33         case 6:
     34             printf("pour B A
    ");
     35             break;
     36         case 7:
     37             printf("success
    ");
     38         default:
     39             break;
     40     }
     41 }
     42 void put(int t){
     43     if(t!=0)
     44     {
     45         put(node[t].pre);
     46         print(node[t].f);
     47     }
     48 }
     49 
     50 void bfs(int a,int b,int c)
     51 {
     52     while(!s.empty())
     53         s.pop();
     54     node[pos].a = 0;
     55     node[pos].b = 0;
     56     node[pos].pre = 0;
     57     node[pos].num = pos;
     58     mark[0][0] = false;
     59     s.push(node[pos++]);
     60     while(!s.empty())
     61     {
     62         Node tmp = s.front();
     63         s.pop();
     64         if(tmp.b==c)
     65         {
     66             node[pos].f = 7;
     67             node[pos].pre = tmp.num;
     68             put(pos);
     69             return;
     70         }
     71         if(mark[a][tmp.b])
     72         {
     73             node[pos].a = a;
     74             node[pos].b = tmp.b;
     75             node[pos].num = pos;
     76             node[pos].pre = tmp.num;
     77             node[pos].f = 1;
     78             mark[a][tmp.b] = false;
     79             s.push(node[pos++]);
     80         }
     81         if(mark[tmp.a][b])
     82         {
     83             node[pos].a = tmp.a;
     84             node[pos].b = b;
     85             node[pos].num = pos;
     86             node[pos].pre = tmp.num;
     87             node[pos].f = 2;
     88             mark[tmp.a][b] = false;
     89             s.push(node[pos++]);
     90         }
     91         if(mark[0][tmp.b])
     92         {
     93             node[pos].a = 0;
     94             node[pos].b = tmp.b;
     95             node[pos].num = pos;
     96             node[pos].pre = tmp.num;
     97             node[pos].f = 3;
     98             mark[0][tmp.b] = false;
     99             s.push(node[pos++]);
    100         }
    101         if(mark[tmp.a][0])
    102         {
    103             node[pos].a = tmp.a;
    104             node[pos].b = 0;
    105             node[pos].num = pos;
    106             node[pos].pre = tmp.num;
    107             node[pos].f = 4;
    108             mark[tmp.a][0] = false;
    109             s.push(node[pos++]);
    110         }
    111         if(tmp.a>0)
    112         {
    113             int t = tmp.a+tmp.b;
    114             node[pos].a = t-b<0?0:t-b;
    115             node[pos].b = t<b?t:b;
    116             if(mark[node[pos].a][node[pos].b])
    117             {
    118                 node[pos].num = pos;
    119                 node[pos].pre = tmp.num;
    120                 node[pos].f = 5;
    121                 mark[node[pos].a][node[pos].b] = false;
    122                 s.push(node[pos++]);
    123             }
    124         }
    125         if(tmp.b>0)
    126         {
    127             int t = tmp.a+tmp.b;
    128             node[pos].b = (t-a<0)?0:t-a;
    129             node[pos].a = t<a?t:a;
    130             if(mark[node[pos].a][node[pos].b])
    131             {
    132                 node[pos].num = pos;
    133                 node[pos].pre = tmp.num;
    134                 node[pos].f = 6;
    135                 mark[node[pos].a][node[pos].b] = false;
    136                 s.push(node[pos++]);
    137             }
    138         }
    139     }
    140 }
    141 
    142 int main()
    143 {
    144     int a,b,c;
    145     while(~scanf("%d%d%d",&a,&b,&c))
    146     {
    147         memset(mark,true,sizeof(mark));
    148         pos = 0;
    149         bfs(a,b,c);
    150     }
    151     return 0;
    152 }
  • 相关阅读:
    xshell中的nohup与&的含义
    eclipse启动服务报错:Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/maven/cli/MavenCli : Unsupported major.minor version 51.0
    关于MyEclipse启动报错:Error starting static Resources;下面伴随Failed to start component [StandardServer[8005]]; A child container failed during start.的错误提示解决办法.
    组件/服务之间的通信-事件广播和订阅可以有效减少全局变量
    #css3# 可以多背景图设置
    #RXJS# 基础
    #TS# get/set
    #css3# : vs ::
    #css3# box-sizing
    #DOM# 最佳实践:head里面标签的顺序
  • 原文地址:https://www.cnblogs.com/Tree-dream/p/6657544.html
Copyright © 2020-2023  润新知