新农上路
- 积分
- 98
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2014-1-21
- 最后登录
- 1970-1-1
|
具体的代码不记得了,大概的代码是:
enum EDIR {
DIR_UP = 0,
DIR_DOWN,
DIR_LEFT,
DIR_RIGHT,
DIR_COUNT
};
bool findPath(Mouse *m, int x, int y, unordered_set<string> &points) {
if(m->AtCheese())
return true;
for(int i = 0; i < DIR_COUNT; i++) {
EDIR backDir;
int nx, ny;
switch(i) {
case DIR_UP:
nx = x;
ny = y + 1;
backDir = DIR_DOWN;
break;
case DIR_DOWN:
nx = x;
ny = y - 1;
backDir = DIR_UP;
break;
case DIR_LEFT:
nx = x - 1;
ny = y;
backDir = DIR_RIGHT;
break;
case DIR_RIGHT:
nx = x + 1;
ny = y;
backDir = DIR_LEFT;
break;
}
string newPoint = to_string(nx) + "," + to_string(ny);
if(points.count(newPoint))
continue;
points.insert(newPoint);
if(m->Move(i)) {
bool res = findPath(m, nx, ny, points);
if(res)
return true;
m->Move(backDir);
}
}
return false;
}
bool findCheese(Mouse *m) {
unordered_set<string> points;
points.insert("0,0");
return findPath(m, 0, 0, points);
} |
|