題意是有一個輸入,比如:
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; }
HDU 1159 Common Subsequence 最大
PCL,樸燦烈1、錯誤原因:系統函數與pcl中的max函數沖
最近在看設計模式(Head First那本),這本
題目開始以為可以用二分匹配解決,但是要和兩邊都求最大匹
【本文鏈接】 http://www.cnblogs.com/
華為機試題1,華為機試題題一:題目描述(60分): 通過鍵盤