pku 3414 Pots 经典BFS

1. 基本的状态转移是很好找的.

2. 难点是判重和状态的保存.

判重我用的是visited[x][y]二维数组, A为容量x, B为容量y时标记已访问;当再次A为容量x, B为容量y时,不再重复搜索.

至于状态的保存我用的是一个结构体

struct Step
{
 int cnt; //一走步数
 int prex, prey; //前一步的分别容量prex, prey
 int preflag; //前一步到本步骤执行的操作标志
};

后面的实现就不赘述了.

 

 

 

 

本题集BFS的最值问题和保存状态问题于一身,不失为一道好题!

 

另一种方法:

 采用的是在队列中直接保存以前的状态, 效率没有上面的方式高, 但是对于状态的保存, 很有参考价值.

struct Pots
{
 int x, y; //当前x, y量
 int op; //到本步的操作
 int pre; //前一状态在队列中的位置
 Pots() {}
 Pots(int xx, int yy, int _op, int _pre){x = xx; y = yy; op = _op; pre = _pre;}
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值