# The Fourth Dimension Space

## POJ 1606-Jugs

//This is the source code for Problem POJ 1606
#include<iostream>
#include
<cmath>
#include
<cstring>
#include
<stack>
using namespace std;

struct node
{

int ca;

int cb;

int pre;
}
line[100];
int hash[10000];
stack
<node>mystack;

int main()
{

int a,b,c;

int front;

int rear;

while(scanf("%d%d%d",&a,&b,&c)!=EOF)

{
memset(hash,
0,sizeof(hash));

while(mystack.empty()!=true)
mystack.pop();

node temp;
temp.ca
=0;
temp.cb
=0;
temp.pre
=-1;
line[
1]=temp;
front
=1;
rear
=1;

while(front<=rear)

{

if(line[front].ca==c||line[front].cb==c)

break;

else if(line[front].ca!=a)

{
node temp;
temp.ca
=a;
temp.cb
=line[front].cb;
temp.pre
=front;

//给出下一个状态
int hashnum=temp.ca*10+temp.cb;

if(hash[hashnum]==0)

{
hash[hashnum]
=1;
rear
++;
line[rear]
=temp;
}
//判重

}

if(line[front].cb!=b)

{

node temp;
temp.cb
=b;
temp.ca
=line[front].ca;
temp.pre
=front;

//给出下一个状态
int hashnum=temp.ca*10+temp.cb;

if(hash[hashnum]==0)

{
hash[hashnum]
=1;
rear
++;
line[rear]
=temp;
}
//判重

}

if(line[front].ca!=0)

{

node temp;
temp.ca
=0;
temp.cb
=line[front].cb;
temp.pre
=front;

//给出下一个状态

int hashnum=temp.ca*10+temp.cb;

if(hash[hashnum]==0)

{
hash[hashnum]
=1;
rear
++;
line[rear]
=temp;
}
//判重

}

if(line[front].cb!=0)

{

node temp;
temp.cb
=0;
temp.ca
=line[front].ca;
temp.pre
=front;

//给出下一个状态

int hashnum=temp.ca*10+temp.cb;

if(hash[hashnum]==0)

{
hash[hashnum]
=1;
rear
++;
line[rear]
=temp;
}
//判重

}

if(line[front].ca!=0&&line[front].cb!=b)

{

node temp;

if(b-line[front].cb>=line[front].ca)

{
temp.ca
=0;
temp.cb
=line[front].cb+line[front].ca;
temp.pre
=front;
}

else

{
temp.ca
=line[front].ca-(b-line[front].cb);
temp.cb
=b;
temp.pre
=front;
}

//给出下一个状态

int hashnum=temp.ca*10+temp.cb;

if(hash[hashnum]==0)

{
hash[hashnum]
=1;
rear
++;
line[rear]
=temp;
}
//判重

}

if(line[front].ca!=a&&line[front].cb!=0)

{

node temp;

if(a-line[front].ca>=line[front].cb)

{
temp.cb
=0;
temp.ca
=line[front].ca+line[front].cb;
temp.pre
=front;
}

else

{
temp.cb
=line[front].cb-(a-line[front].ca);
temp.ca
=a;
temp.pre
=front;
}

//给出下一个状态

int hashnum=temp.ca*10+temp.cb;

if(hash[hashnum]==0)

{
hash[hashnum]
=1;
rear
++;
line[rear]
=temp;
}
//判重

}

front
++;
}

int tempnum=front;

while(line[tempnum].pre!=-1)

{

mystack.push(line[tempnum]);
tempnum
=line[tempnum].pre;
}

node tempnode1;
tempnode1.ca
=0;
tempnode1.cb
=0;
tempnode1.pre
=-1;

node tempnode2;

while(mystack.empty()!=true)

{
tempnode2
=mystack.top();
mystack.pop();

if(tempnode1.ca!=0&&tempnode2.ca==0&&(tempnode1.cb==tempnode2.cb))
printf(
"empty A\n");

else if(tempnode1.cb!=0&&tempnode2.cb==0&&(tempnode1.ca==tempnode2.ca))
printf(
"empty B\n");

else if(tempnode1.ca!=a&&tempnode2.ca==a&&(tempnode1.cb==tempnode2.cb))
printf(
"fill A\n");

else if(tempnode1.cb!=b&&tempnode2.cb==b&&(tempnode1.ca==tempnode2.ca))
printf(
"fill B\n");

else if(tempnode2.ca>tempnode1.ca)
printf(
"pour B A\n");

else
printf(
"pour A B\n");
tempnode1
=tempnode2;
}

printf(
"success\n");
}

return 0;
}

500B的代码如下：
#include<iostream>
using namespace std;
int main()
{
int ca,cb,n;
int a,b;
while(cin>>ca>>cb>>n)
{
a
=0;b=0;
while(1)
{

if(b==cb) {cout<<"empty B"<<endl;b=0;if(b==n) {cout<<"success"<<endl;break;}}

else if(a==0{cout<<"fill A"<<endl;a=ca;if(b==n) {cout<<"success"<<endl;break;}}

else if(b+a<cb) {cout<<"pour A B"<<endl;b=b+a;a=0;if(b==n) {cout<<"success"<<endl;break;}}

else if(b+a>=cb) {cout<<"pour A B"<<endl;a=a+b-cb;b=cb;if(b==n) {cout<<"success"<<endl;break;}}
}

}

system(
"pause");
return 0;
}

posted on 2009-07-06 16:38 abilitytao 阅读(535) 评论(1)  编辑 收藏 引用