UVa_11212(迭代加深搜索)
2017-04-13 20:04
561 查看
#include<iostream> #include<cstring> using namespace std; const int maxn = 400000; bool Vis[maxn]; int n; int D[10]; int kangtuo(int A[9]) { int t = 0; for (int i = 0; i<n; i++) { int cnt = 0; int x = A[i]; for (int j = i + 1; j<n; j++) { if (A[j]<x) cnt++; } t += cnt*D[n - i - 1]; } return t; } int In[10]; void turn(int A[9], int B[9], int l1, int r1, int l2, int r2, int &h) { h = 0; int p1 = l1, p2 = l1 + (r2 - l2), p3 = r2; for (int i = 0; i<n; i++) { if (i<p1 || i>p3) B[i] = A[i]; else if (i <= p2) { B[i] = A[i - p1 + l2]; } else { B[i] = A[i - p2 - 1 + l1]; } if (i>0 && B[i - 1] != B[i]-1) h++; else if (i == 0 && B[i] != 1) h++; } } bool dfs(int cen, int deep, int A[9], int knum) { if (cen == deep) { return knum == 0; } else { for (int i = 0; i<n; i++) { for (int j = i; j<n; j++) { int l = j + 1; for (int r = l; r<n; r++)//通过将[i,j]和[l,r]置换 { int B[9]; int h; turn(A, B, i, j, l, r, h); if (3 * (deep - cen) >= h) { int nknum = kangtuo(B); //if (!Vis[nknum])不能进行标记 { Vis[nknum] = 1; if (dfs(cen + 1, deep, B, nknum)) { return true; } } } } } } return false; } } int main() { D[0] = 1; for (int i = 1; i<10; i++) { D[i] = D[i - 1] * i; } cin >> n; for (int i = 0; i<n; i++) { cin >> In[i]; } int maxdeep = n - 1; int ans = -1; int k = kangtuo(In); for (int i = 0; i<=maxdeep; i++) { memset(Vis, 0, sizeof(Vis)); if (dfs(0, i, In, k)) { ans = i; break; } } cout << ans << endl; return 0; }
相关文章推荐
- UVA 11212 Editing a Book [迭代加深搜索IDA*]
- uva 11212 - Editing a Book(迭代加深搜索 IDA*) 迭代加深搜索
- [UVa 11212] Editing a Book (迭代加深搜索)
- 迭代加深搜索--IDA*--uva11212 Editing a book
- UVA - 11212 Editing a Book(迭代加深搜索 IDA* + 模板)
- uva 11212 - Editing a Book(迭代加深搜索 IDA*) 迭代加深搜索
- IDA*,迭代加深搜索(编辑书稿,uva 11212)
- UVa 1533:Moving Pegs(迭代加深搜索)
- 紫书第七章-----暴力求解法(迭代加深搜索Egyptian Fractions (HARD version) UVA - 12558)
- 紫书搜索 例题7-10 UVA - 11212 Editing a Book 迭代加深搜索 IDA*
- UVa 529 - Addition Chains ,迭代加深搜索+减枝
- UVA 1374 迭代加深搜索
- UVA - 1343(IDA*(迭代加深搜索)为什么会很快原因待解 )
- UVa 11212 Editing a Book (编辑书稿)迭代加深
- UVa 11212 编辑书籍 Editing a Book 迭代加深
- UVa 1374 - Power Calculus ( IDA* - 迭代加深搜索 )
- 迭代加深搜索IDA*---uva1343 the rotation game
- UVA UVA - 1374 Power Calculus 快速幂计算(迭代加深搜索)
- UVA 1343 - The Rotation Game-[IDA*迭代加深搜索]
- UVa 1374 - Power Calculus——[迭代加深搜索、快速幂]