UVA 10651 Pebble Solitaire
2011-11-25 23:45
393 查看
UVA_10651
由于总状态很少,所以直接广搜即可。
由于总状态很少,所以直接广搜即可。
#include<stdio.h> #include<string.h> #define MAXD 10010 char b[20]; int d[MAXD], q[MAXD], hash[MAXD], N; void init() { int i, j; scanf("%s", b); N = q[0] = 0; for(i = 0; i < 12; i ++) { q[0] = (q[0] << 1) + (b[i] == 'o' ? (N ++, 1) : 0); } } void solve() { int i, j, k, x, front , rear; front = rear = 0; memset(hash, 0, sizeof(hash)); hash[q[rear]] = 1; d[rear] = 0; rear ++; while(front < rear) { x = q[front]; for(i = 0; i < 12; i ++) if((1 << i) & x) { if(i < 10 && ((1 << (i + 1)) & x) && !((1 << (i + 2)) & x)) { q[rear] = x ^ (1 << i) ^ (1 << (i + 1)) ^ (1 << (i + 2)); if(!hash[q[rear]]) { d[rear] = d[front] + 1; hash[q[rear]] = 1; rear ++; } } if(i > 1 && ((1 << (i - 1)) & x) && !((1 << (i - 2)) & x)) { q[rear] = x ^ (1 << i) ^ (1 << (i - 1)) ^ (1 << (i - 2)); if(!hash[q[rear]]) { d[rear] = d[front] + 1; hash[q[rear]] = 1; rear ++; } } } front ++; } printf("%d\n", N - d[rear - 1]); } int main() { int t; scanf("%d", &t); while(t --) { init(); solve(); } return 0; }
相关文章推荐
- UVA - 10651 Pebble Solitaire
- Pebble Solitaire - UVa 10651 状压dp+记忆化搜素
- Pebble Solitaire(UVA 10651)
- uva 10651 - Pebble Solitaire(记忆化搜索)
- UVa 10651 Pebble Solitaire(状态压缩DP)
- 记忆化搜索 uva-10651-Pebble Solitaire
- UVa 10651 Pebble Solitaire(DP 记忆化搜索)
- UVA 10651 Pebble Solitaire(bfs + 哈希判重(记忆化搜索?))
- uva 10651 - Pebble Solitaire
- uva10651 - Pebble Solitaire(状态压缩)
- UVa 10651 Pebble Solitaire (DP&bitset)
- UVA 10651 Pebble Solitaire 状压Dp
- UVA 10651 Pebble Solitaire 鹅卵石摆放 记忆化搜索+DFS+记忆化搜索
- UVa 10651 Pebble Solitaire(DP 记忆化搜索)
- uva 10651 Pebble Solitaire(dp,状态压缩,记忆化搜索)
- UVa 10651 - Pebble Solitaire 状态压缩 dp
- UVA 10651 - Pebble Solitaire
- UVa 10651 - Pebble Solitaire 状态压缩 dp
- UVa10651 - Pebble Solitaire
- uva 10651- Pebble Solitaire(状态压缩DP)待看。。。