while(q.size()) { auto t = q.front(); q.pop(); int dis = d[t]; if (t == end) return dis;
int k = t.find('x'); int x = k / 3, y = k % 3; for(int i = 0; i < 4; i++) { int a = x + dx[i], b = y + dy[i]; if (a >= 0 && a < 3 && b >= 0 && b < 3) { swap(t[a * 3 + b], t[k]); // unordered_map 底层是红黑树的实现,所以使用Count返回的是key的数量 // 如果存在就是返回1, 不存在返回0 // 或者直接使用d["demo"], 如果存在返回value不存在返回0 if(!d[t]) { d[t] = dis + 1; q.push(t); } swap(t[a * 3 + b], t[k]); } } } return-1; }