时间限制:1秒
空间限制:65536K
有一个推箱子的游戏, 一开始的情况如下图:
上图中, ‘.’ 表示可到达的位置, ‘#’ 表示不可到达的位置,其中 S 表示你起始的位置, 0表示初始箱子的位置, E表示预期箱子的位置,你可以走到箱子的上下左右任意一侧, 将箱子向另一侧推动。如下图将箱子向右推动一格;
…S0… -> …S0.
注意不能将箱子推动到’#'上, 也不能将箱子推出边界;
现在, 给你游戏的初始样子, 你需要输出最少几步能够完成游戏, 如果不能完成, 则输出-1。
输入描述:
第一行为2个数字,n, m, 表示游戏盘面大小有n 行m 列(5< n, m < 50);
后面为n行字符串,每行字符串有m字符, 表示游戏盘面;
输出描述:
一个数字,表示最少几步能完成游戏,如果不能,输出-1;
输入例子1:
3 6
.S#…E
.#.0…
…
输出例子1:
11
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main(){
string s;
vector<string> vec;
getline(cin,s);
vec.push_back(s);
getline(cin,s);
vec.push_back(s);
for(int i=0;i<2;i++){
string ss=vec[i];
int size=ss.size();
int n1=size/8;
int n2=size%8;
if(n2>0&&n2<8){
for(int i=0;i<8-n2;i++){
ss.push_back('0');
}
}
if(n2>0)
n1++;
for(int i=0;i<n1;i++){
cout<<ss.substr(i*8,8)<<endl;
}
}
}