33,008
社区成员
发帖
与我相关
我的任务
分享
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
#define MAX 10
int ca, cb, cn;
int mask[1000][1000];
bool dfs(int a, int b, int count){
if(b == cn)
return true;
if(count >= MAX)
return false;
if(mask[a][b])
return false;
mask[a][b] = 1;
if(a<ca && dfs(ca, b, count+1))
printf("fill A\n");
else if(b<cb && dfs(a, cb, count+1))
printf("fill B\n");
else if(a>0 && dfs(0, b, count+1))
printf("empty A\n");
else if(b>0 && dfs(a, 0, count+1))
printf("empty B\n");
else if(a>=cb-b && dfs(a-(cb-b), cb, count+1))
printf("pour A B\n");
else if(a<cb-b && dfs(0, b+a, count+1))
printf("pour A B\n");
else if(b>=ca-a && dfs(ca, b-(ca-a), count+1))
printf("pour B A\n");
else if(b<ca-a && dfs(a+b, 0, count+1))
printf("pour B A\n");
mask[a][b] = 0;
return false;
}
int main(){
freopen("in.txt", "r", stdin);
while(cin>>ca>>cb>>cn){
memset(mask, 0, sizeof(mask));
if(dfs(0, 0, 1))
printf("success\n");
}
fclose(stdin);
}
#include<iostream>
#include<string>
#include<cstdio>
#include<vector>
#include<memory.h>
#include<algorithm>
using namespace std;
#define MAX 100
int ca, cb, cn;
int mask[1000][1000];
vector<string> op;
bool flag;
bool dfs(int a, int b, int count){
if(flag)
return true;
if(b == cn){
for(int i=0;i<op.size();++i){
cout<<op[i]<<endl;
}
flag = true;
return true;
}
if(count >= MAX)
return false;
if(mask[a][b])
return false;
mask[a][b] = 1;
if(a<ca){
op.push_back("fill A");
dfs(ca, b, count+1);
op.pop_back();
}
if(b<cb){
op.push_back("fill B");
dfs(a, cb, count+1);
op.pop_back();
}
if(a>0){
op.push_back("empty A");
dfs(0, b, count+1);
op.pop_back();
}
if(b>0){
op.push_back("empty B");
dfs(a, 0, count+1);
op.pop_back();
}
if(a>=cb-b){
op.push_back("pour A B");
dfs(a-(cb-b), cb, count+1);
op.pop_back();
}
if(a<cb-b){
op.push_back("pour A B");
dfs(0, b+a, count+1);
op.pop_back();
}
if(b>=ca-a){
op.push_back("pour B A");
dfs(ca, b-(ca-a), count+1);
op.pop_back();
}
if(b<ca-a){
op.push_back("pour B A");
dfs(a+b, 0, count+1);
op.pop_back();
}
mask[a][b] = 0;
return false;
}
int main(){
//freopen("in.txt", "r", stdin);
while(cin>>ca>>cb>>cn){
memset(mask, 0, sizeof(mask));
flag = false;
dfs(0, 0, 1);
if(flag)
printf("success\n");
}
//fclose(stdin);
}