C++随机prim算法生成迷宫,无法成功,调试时有SIGTRAP信号
namespace RandomPrim {
Maze generate(int row, int col) {
Maze result(row, col);
vector<bool>U(row * col, false);
U[0] = true;
set<pair<int, int>>edges;
edges.insert(make_pair(0, 1));
edges.insert(make_pair(0, col));
int current = 0;
while (!edges.empty()) {
int pos = rand() % edges.size();
set<pair<int, int>>::iterator edge = edges.begin();
advance(edge, pos);
int f = edge->first;
int s = edge->second;
current = (!U[f]) ? f : s;//((!U[s]) ? s : 0);
result.connect(f, s);
U[current] = true;
//更新edges
vector<int>sur = result.surrounded(current);
for (vector<int>::iterator it = sur.begin(); it != sur.end(); it++) {
f = (current > *it ? *it : current);
s = (current < *it ? *it : current);
pair<int, int>path = make_pair(f, s);
if (!U[f] || !U[s]) {
edges.insert(path);
} else {
edges.erase(edges.find(path));
}
}
}
return result;
}
}