贪吃蛇游戏,操作分为顺时针、逆时针旋转 9 0 ∘ 90^\circ 90∘和直走操作,每个操作均耗时 1 1 1单位时间。不考虑蛇身体的影响,给定初始坐标和朝向,吃掉当前食物后下一个食物才会出现,求操作序列使吃每个食物耗时最短。
大模拟,当前点针对下一个食物点有 8 8 8种位置关系,每种位置关系下又有四个朝向不同的情况,一共 32 32 32种情况。数据范围较小,模拟即可解决。
Accepted Code
#include
using namespace std;
void walk(int step){ for(int i = 1; i > n;
for(int i = 1; i > nx >> ny;
int dx = nx - sx, dy = ny - sy;
if(dx > 0 && dy > 0){
switch(sd){
case 0: walk(dy); rc(sd); walk(dx); break;
case 1: walk(dx); ru(sd); walk(dy); break;
case 2: ru(sd); walk(dx); ru(sd); walk(dy); break;
case 3: rc(sd); walk(dy); rc(sd); walk(dx); break;
}
}
else if(dx 0){
switch(sd){
case 0: rc(sd); break;
case 1: break;
case 2: ru(sd); break;
case 3: ru(sd); ru(sd); break;
}
walk(dx);
}
else{
switch(sd){
case 0: ru(sd); break;
case 1: rc(sd); rc(sd); break;
case 2: rc(sd); break;
case 3: break;
}
walk(dx);
}
}
sx = nx, sy = ny;
}
cout t;
while(t--) solve();
return 0;
}