class Solution {
public:
bool ret = false;
set<pair<int,int>> s;
void dfs(int nowx,int nowy,int x,int y,int target)
{
if(s.count(make_pair(nowx,nowy)))
return;
if(nowx==target||nowy==target||nowx+nowy==target||x==target||y==target)
{
ret = true;
return;
}
s.insert(make_pair(nowx,nowy));
dfs(0,nowy,x,y,target);
dfs(nowx,0,x,y,target);
dfs(x,nowy,x,y,target);
dfs(nowx,y,x,y,target);
if(nowx > y-nowy)
dfs(nowx-(y-nowy),y,x,y,target);
else
dfs(0,nowx+nowy,x,y,target);
if(x-nowx > nowy)
dfs(nowx+nowy,0,x,y,target);
else
dfs(x,nowy-(x-nowx),x,y,target);
s.erase(make_pair(nowx,nowy));
}
bool canMeasureWater(int x, int y, int target)
{
dfs(0,0,x,y,target);
return ret;
}
};
个人做法非最优解