您的位置:首页 > 其它

ZOJ 1005 Jugs (DFS)

2011-06-24 11:31 337 查看
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1005

#include <stdio.h>
#include <string.h>
#include <vector>
#include <iostream>
using namespace std;
int ca, cb, n;
bool status[1001][1001];
vector<string> v;
bool fun(int a, int b)
{
if(a == n || b == n)
{
v.push_back("success");
return true;
}
if(status[a][b] == true)return false;
status[a][b] = true;
if(a < ca && b < cb)
{
if(a > 0) // A->B
{
if(a + b <= cb)
{
if(fun(0, a + b))
v.push_back("pour A B");
return true;
}
}
else
{
if(fun(a + b - cb, cb))
v.push_back("pour A B");
return true;
}

if(b > 0) // B->A
{
if(a + b <= ca)
{
if(fun(a + b, 0))
{
v.push_back("pour B A");
return true;
}
}
else
{
if(fun(ca, a + b - ca))
v.push_back("pour B A");
return true;
}
}

// empty A
if(fun(0, b))
{
v.push_back("empty A");
return true;
}
// empty B
if(fun(a, 0))
{
v.push_back("empty B");
return true;
}
if(fun(ca, b)) // FA
{
v.push_back("fill A");
return true;
}
if(fun(a, cb)) // FB
{
v.push_back("fill B");
return true;
}
}
else if(a < ca && b == cb)
{
// B->A
if(a + b <= ca)
{
if(fun(a + b, 0))
{
v.push_back("pour B A");
return true;
}
}
else
{
if(fun(ca, a + b - ca))
v.push_back("pour B A");
return true;
}

// empty A
if(fun(0, b))
{
v.push_back("empty A");
return true;
}
// empty B
if(fun(a, 0))
{
v.push_back("empty B");
return true;
}
if(fun(ca, cb)) // FA
{
v.push_back("fill A");
return true;
}
}
else if(a == ca && b < cb) // A->B
{
if(a + b <= cb)
{
if(fun(0, a + b))
{
v.push_back("pour A B");
return true;
}
}
else
{
if(fun(a + b - cb, cb))
v.push_back("pour A B");
return true;
}

// empty A
if(fun(0, b))
{
v.push_back("empty A");
return true;
}
// empty B
if(fun(a, 0))
{
v.push_back("empty B");
return true;
}
if(fun(ca, cb)) // FB
{
v.push_back("fill B");
return true;
}
}
return false;
}
int main()
{
while(scanf("%d %d %d", &ca, &cb, &n) != EOF)
{
v.clear();
memset(status, false, sizeof(status));
fun(0, 0);
for(int i = v.size() - 1; i >= 0; i--)
cout << v[i] << endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  fun