Sokoban: Difference between revisions

115 bytes removed ,  10 years ago
Line 452:
int w = 0;
vector<string> data;
for(; iter != end; ++iter){
{
data.push_back((*iter)[1]);
w = max(w, (*iter)[1].length());
}
 
for(int v = 0; v < data.size(); ++v){
{
vector<char> sTemp, dTemp;
for(int u = 0; u < w; ++u){
if(u > data[v].size()){
if(u > data[v].size())
{
sTemp.push_back(' ');
dTemp.push_back(' ');
}else{
else
{
char s = ' ', d = ' ', c = data[v][u];
 
Line 477 ⟶ 471:
s = '.';
 
if(c == '@' || c == '+'){
{
d = '@';
px = u;
py = v;
}else if(c == '$' || c == '*')
else if(c == '$' || c == '*')
d = '*';
 
Line 542 ⟶ 534:
dirs[3] = make_tuple(-1, 0, 'l', 'L');
 
while(open.size() > 0){
{
vector<vector<char>> temp, cur = get<0>(open.front());
string cSol = get<1>(open.front());
Line 550 ⟶ 541:
open.pop();
 
for(int i = 0; i < 4; ++i){
{
temp = cur;
int dx = get<0>(dirs[i]);
int dy = get<1>(dirs[i]);
 
if(temp[y+dy][x+dx] == '*'){
if(push(x, y, dx, dy, temp) && (visited.find(temp) == visited.end())){
{
if(push(x, y, dx, dy, temp) && (visited.find(temp) == visited.end()))
{
if(isSolved(temp))
return cSol + get<3>(dirs[i]);
Line 565 ⟶ 553:
visited.insert(temp);
}
}else if(move(x, y, dx, dy, temp) && (visited.find(temp) == visited.end())){
}
else if(move(x, y, dx, dy, temp) && (visited.find(temp) == visited.end()))
{
if(isSolved(temp))
return cSol + get<2>(dirs[i]);
Line 610 ⟶ 596:
 
ulULLulDDurrrddlULrruLLrrUruLLLulD</pre>
 
===Unordered Set-based Version===
{{works with|C++11}}
Anonymous user