Anonymous user
Sokoban: Difference between revisions
→Set-based Version
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()){
sTemp.push_back(' ');
dTemp.push_back(' ');
}else{
char s = ' ', d = ' ', c = data[v][u];
Line 477 ⟶ 471:
s = '.';
if(c == '@' || c == '+'){
d = '@';
px = u;
py = v;
}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}}
|