zoukankan      html  css  js  c++  java
  • UVA 10651 Pebble Solitaire

    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;
    }


  • 相关阅读:
    用java在mysql中随机插入9000 000条数据
    java连接mysql的一个小例子
    JDK环境变量配置
    JVM工作原理
    线程和进程的区别
    java实现链表
    内连接、外连接、左连接、右连接
    udp协议
    要看的东西
    eclipse快捷键
  • 原文地址:https://www.cnblogs.com/staginner/p/2263944.html
Copyright © 2011-2022 走看看