• hdu1495非常可乐(bfs)


    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1495

    每次六种决策,见注释。


    vis开二维就够用了,因为水的总量是一定的

      1 #include<cstdio>
      2 #include<cstring>
      3 #include<queue>
      4 using namespace std;
      5 const int maxn=110;
      6 int vis[maxn][maxn][maxn];
      7 int ca,cb,cc;
      8 int ban;
      9 struct staus
     10 {
     11     int a,b,c;
     12     int dis;
     13 }now,nex;
     14 
     15 int bfs()
     16 {
     17     queue<staus> q;
     18     now.a=ca;now.b=0;now.c=0;
     19     now.dis=0;
     20     vis[ca][0][0]=1;
     21     q.push(now);
     22     while(!q.empty())
     23     {
     24         now=q.front();
     25         q.pop();
     26         if(now.a==ban&&(now.b==ban||now.c==ban)||now.b==ban&&(now.a==ban||now.c==ban)
     27            ||now.c==ban&&(now.b==ban||now.a==ban)) return now.dis;
     28         if(now.a>0&&now.b<cb)  //a倒给b
     29         {
     30             int v=min(now.a,cb-now.b);
     31             nex.a=now.a-v;
     32             nex.b=now.b+v;
     33             nex.c=now.c;
     34             if(!vis[nex.a][nex.b][nex.c]) {
     35                 vis[nex.a][nex.b][nex.c]=1;
     36                 nex.dis=now.dis+1;
     37                 q.push(nex);
     38             }
     39         }
     40         if(now.a>0&&now.c<cc) //a倒给c
     41         {
     42             int v=min(now.a,cc-now.c);
     43             nex.a=now.a-v;
     44             nex.c=now.c+v;
     45             nex.b=now.b;
     46             if(!vis[nex.a][nex.b][nex.c]) {
     47                 vis[nex.a][nex.b][nex.c]=1;
     48                  nex.dis=now.dis+1;
     49                 q.push(nex);
     50             }
     51         }
     52         if(now.a<ca&&now.b>0) //b倒给a
     53         {
     54             int v=min(now.b,ca-now.a);
     55             nex.a=now.a+v;
     56             nex.b=now.b-v;
     57             nex.c=now.c;
     58             if(!vis[nex.a][nex.b][nex.c]) {
     59                 vis[nex.a][nex.b][nex.c]=1;
     60                  nex.dis=now.dis+1;
     61                 q.push(nex);
     62             }
     63         }
     64          if(now.a<ca&&now.c>0) //c倒给a
     65         {
     66             int v=min(now.c,ca-now.a);
     67             nex.c=now.c-v;
     68             nex.a=now.a+v;
     69             nex.b=now.b;
     70             if(!vis[nex.a][nex.b][nex.c]) {
     71                 vis[nex.a][nex.b][nex.c]=1;
     72                  nex.dis=now.dis+1;
     73                 q.push(nex);
     74             }
     75         }
     76          if(now.c>0&&now.b<cb) //c倒给b
     77         {
     78             int v=min(now.c,cb-now.b);
     79             nex.c=now.c-v;
     80             nex.b=now.b+v;
     81             nex.a=now.a;
     82             if(!vis[nex.a][nex.b][nex.c]) {
     83                 vis[nex.a][nex.b][nex.c]=1;
     84                  nex.dis=now.dis+1;
     85                 q.push(nex);
     86             }
     87         }
     88          if(now.b>0&&now.c<cc)  //b倒给c
     89         {
     90             int v=min(now.b,cc-now.c);
     91             nex.c=now.c+v;
     92             nex.b=now.b-v;
     93             nex.a=now.a;
     94             if(!vis[nex.a][nex.b][nex.c]) {
     95                 vis[nex.a][nex.b][nex.c]=1;
     96                  nex.dis=now.dis+1;
     97                 q.push(nex);
     98             }
     99         }
    100 
    101     }
    102     return -1;
    103 
    104 }
    105 int main()
    106 {
    107     while(scanf("%d%d%d",&ca,&cb,&cc)&&(ca||cb||cc))
    108     {
    109         if(ca%2) {puts("NO");continue;}
    110         ban=ca/2;
    111         memset(vis,0,sizeof(vis));
    112         int st=bfs();
    113         if(st!=-1) printf("%d
    ",st);
    114         else puts("NO");
    115     }
    116 }
  • 相关阅读:
    P4387 P4387 【深基15.习9】验证栈序列
    P1241 括号序列题解
    P2058 海港题解
    P1540 机器翻译题解
    leaflet + react + typescript
    TypeScript中文手册:从 JavaScript 迁移到 TypeScript
    react-esri-leaflet与typescript
    TypeError: Super expression must either be null or a function
    前端库(gis前端库和普通库分开)
    react-leaflet:Module parse failed: Unexpected token (10:41)
  • 原文地址:https://www.cnblogs.com/yijiull/p/6613300.html
Copyright © 2020-2023  润新知