java_day11

目标:Java web开发

题目:复原格子

import java.util.*;
//这里面包含了
//HashMap,HashTable,TreeMap
// ArrayList、LinkedList,Vector
// HashSet,LinkedHashSet,TreeSet
class Main {
    static Scanner sc=new Scanner(System.in);
    static StringBuilder sb=new StringBuilder();
    //或者 static StringBuffer sb=new StringBuffer();线程安全,较慢
    static int[] dx={-1,1,0,0},dy={0,0,-1,1};
    public static void main(String[] args){
        for (int i=0;i<9;++i) sb.append(sc.next());//sc.next()读取字符串,到空格停止
        String state="12345678x";
        int n=3;
        LinkedList<String> q=new LinkedList<>();
        //还可以写Queue<String> q=new LinkedList<>();多态性
        HashSet<String> v=new HashSet<>();
        /*
        HashSet集合不允许有重复的元素
        add() 增加一个元素
        size() 返回Set集合中的元素个数
        clear() 清除所有的元素
        isEmpty() 如果不包含元素,则返回 true ,否则返回false
        contains() 如果包含指定的元素,则返回 true,否则返回false
        */
        q.offer(sb.toString());//StringBuilder转化为String
        v.add(sb.toString());
        int cnt=0;
        while(!q.isEmpty()) {
            int size=q.size();
            for (int i=0;i<size;++i) {
                String cur=q.poll();//获取元素并从原队列中删除,不移除的话用peek()
                if(state.equals(cur)){
                    System.out.println(cnt);
                    return;
                }
                int j=0;
                while(cur.charAt(j)!='x') j++;
                int x=j/3,y=j%3;
                for (int k=0;k<dx.length;++k) {//数组类中有length属性
                    int xx=x+dx[k],yy=y+dy[k];
                    if(xx<0||xx>=3||yy<0||yy>=3) continue;
                    int d=xx*3+yy;
                    char[] chs=cur.toCharArray();
                    char tmp=chs[j] ;
                    chs[j]=chs[d];
                    chs[d]=tmp;
                    String next=new String(chs);
                    if(!v.add(next)) continue;
                    //用if(v.contains(next))会超时
                    q.offer(next);//插入队列
                }
            }
            cnt++;
        }
        System.out.println(-1);
    }
}
posted @ 2021-07-15 21:59  zhuangzhongxu  阅读(41)  评论(0编辑  收藏  举报