题目链接:
http://poj.org/problem?id=3414
题意:
给出了两个瓶子的容量A,B, 以及一个目标水量C,
对A、B可以有如下操作:
FILL(i) 填满 i 壶
DROP(i) 倒空 i 壶
POUR(i,j) 把 i 壶的水倒入 j 壶
问经过哪几个操作后能使得任意一个瓶子的残余水量为C。
若不可能得到则输出impossible
题解:
原本一道bfs经典题就硬生生的被改成了恶心吃屎题,记录路径这种东西,唉。。。定pre数组,pre[i]表示标号i的状态由标号 pre[i] 转移而来,最后回溯着输出。
代码:
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
using namespace std;
int a,b,c;
struct node{
int x;int y;
}q[10005];
int ans,anss,h,t,vis[105][105],pre[10005],step[10005];
void dfs(int id)
{
if(step[id])
{
dfs(pre[id]);