水桶传递队列
很简单,一眼bfs,觉得这题似曾相识,考虑用2进制的01来做,但下手前犹豫了一下看了眼标签,哦分类讨论。
但是分类讨论我讨论了一直错,太难受了
int main() {
IOS;
// freopen("P1908_6.in","r",stdin);//读入数据
// freopen("P1908.out","w",stdout); //输出数据
char c;
int x1, y1, x2, y2, x3, y3;
for (int i = 1; i <= 10; ++i){
for (int j = 1; j <= 10; ++j){
cin >> c;
if (c == 'L') x1 = i, y1 = j;
else if (c == 'R') x2 = i, y2 = j;
else if (c == 'B') x3 = i, y3 = j;
}
}
//开始讨论
int res = abs(x1 - x3) + abs(y1 - y3) - 1;
if (x1 == x2 && x2 == x3 && (y2 - y1) * (y2 - y3) < 0 || y1 == y2 && y2 == y3 && (x2 - x1) * (x2 - x3) < 0)
res += 2;
cout << res << endl;
return 0;
}
起码学到了新东西,就是说
这个点如果在两个点之间,那么(c - b)* (c - a) < 0
如果有多个障碍物则考虑动态规划