int bfs(state init) { state u, v; queue<state> Q; map<state, int> R; int f; init = eraseGoal(init); Q.push(init), R[init] = 0; // print(init); if (init.isComplete()) return 0; while (!Q.empty()) { u = Q.front(), Q.pop(); int step = R[u]; // print(u); // printf("step %d\n", step); for (int i = 0; i < 4; i++) { v = rotateMap(u, i, f); v = eraseGoal(v); if (!f || R.count(v)) continue; if (v.isComplete()) return step + 1; R[v] = step + 1; // print(v); Q.push(v); } // puts("--------------"); // getchar(); } return -1; }