題意是有一個輸入,比如:
1 0 2 3 4 5 6 7
擺成如下形狀:
0表示空格,其他數字可以移動到0的位置。最後需要到如下形狀:
0 1 2 3 4 5 6 7
上面的這種情況是需要移動一步,也就是0和1直接移動就好。
#include #include #include #include #include using namespace std; int dx[4] = { 1,-1,4,-4 }; mapres; void solve(void) { queueque; que.push(01234567); while (!que.empty()) { string v = que.front(); que.pop(); int pos = 0; for (int i = 0; i < 8; i++) if (v[i] == '0')pos = i; for (int i = 0; i < 4; i++) { if (0 <= pos + dx[i] && pos + dx[i] < 8 && !(pos == 3 && i == 0) && !(pos == 4 && i == 1)) { string u = v; swap(u[pos], u[pos + dx[i]]); if (res[u] == 0) { que.push(u); res[u] = res[v] + 1; } } } } } int main(void) { int in; res[01234567] = 1; solve(); while (true) { string s; for (int i = 0; i < 8; i++) { if (!(cin >> in))return 0; s += in + '0'; } cout << res[s] - 1 << endl; } return 0; }
記得剛接觸代理,是在大話設計模式,最近在技術總結
編程之前,有必要復習一下C++中面向對象的一些
前言:雖然目前沒有編譯器能夠完全實現C++11,但這並不意味
C++ 語言可以定義如何將其他類型的對象隱式轉換為我們的類類
准備開發簡易輸電線路管理信息系統;方便起見;下一個源碼來改;
組合(Composite)模式的其它翻譯名稱也很多,比如合成