翻纸牌游戏_hdu_2209(双向广搜).java(二)

2014-11-24 08:39:15 · 作者: · 浏览: 5
ln(map.get(f));
if(f1.equals(sf)){
System.out.println(d.num+1);
okk=true;
ok=true;
return;
}
P h=new P();
h.s=f;
h.num=d.num+1;
map.put(f1,0);
q.add(h);
}
}
/*if(f.charAt(d.i)=='0'){
f.deleteCharAt(d.i);
f.insert(d.i, 1);
}
else{
f.deleteCharAt(d.i);
f.insert(d.i, 0);
}
if(d.i>0){
if(f.charAt(d.i-1)=='0'){
f.deleteCharAt(d.i-1);
f.insert(d.i-1, 1);
}
else{
f.deleteCharAt(d.i-1);
f.insert(d.i-1, 0);
}
}
if(d.i+1
if(f.charAt(d.i+1)=='0'){
f.deleteCharAt(d.i+1);
f.insert(d.i+1, 1);
}
else{
f.deleteCharAt(d.i+1);
f.insert(d.i+1, 0);
}
}
if(d.i+1!=len){
P g=new P();
g.s=f;
g.i=d.i+1;
g.num=d.num+1;
}*/
}
}
}
class P{
StringBuffer s=null;
int num=0;
}
/* 
 * 01543093 2013-11-10 12:19:26 Accepted    1004    5406 MS 26468 KB    Java    zhangyi 
 9547285    2013-11-10 14:27:34 Accepted    2209    5593MS  26476K  1594 B  Java    zhangyi 
 */  
import java.io.BufferedReader;  
import java.io.InputStreamReader;  
import java.util.LinkedList;  
import java.util.Queue;  
  
public class Main {//AC  
    static char str[] = new char[30];  
    static int dis[] = new int[1 << 20], vis[] = new int[1 << 20],  
            base[] = new int[20], len, aim;  
  
    public static void main(String[] args) {  
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));  
        int i;  
        aim = 0;  
        String s = null;  
        try {  
            while ((s = bf.readLine()) != null) {  
                str = s.toCharArray();  
                len = s.length();  
                base[0] = 3;  
                base[len - 1] = 3 << (len - 2);  
                for (i = 1; i < len - 1; i++)  
                    base[i] = 7 << (i - 1);  
                if (len == 1) {  
                    if (str[0] == '1')  
                        System.out.println(1);  
                    else  
                        System.out.println(0);  
                    continue;  
                }  
                int ans = bfs();  
                if (ans == -1)  
                    System.out.println("NO");  
                else  
                    System.out.println(ans);  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
  
    public static int bfs() {  
        int i, limit = 1 << len;  
        Integer now, next;  
        Queue q = new LinkedList();  
  
        now = 0;  
        for (i = len - 1; i >= 0; i--)  
            now = now * 2 + str[i] - '0';  
        for (i = 0; i < limit; i++)  
            vis[i] = 0;  
        dis[now] = 0;  
        vis[now] = 1;  
        q.add(now);  
  
        while (!q.isEmpty()) {  
            now = q.poll();  
            if (now == aim)  
                return dis[aim];  
            for (i = 0; i < len; i++) {  
                next = now ^ base[i];  
                if (vis[next] != 0)  
                    continue;  
                dis[next] = dis[now] + 1;  
                vis[next] = 1;  
                q.add(next);  
            }  
        }  
  
        return -1;  
    }  
}