java这个为什么第10测试点会mle啊
查看原帖
java这个为什么第10测试点会mle啊
765252
llxxrj楼主2023/2/2 15:16

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Queue;

public class P1379 {
	static String swap(String t,int a,int b) {
		char s[]=t.toCharArray();
		char p=s[a];
		s[a]=s[b];
		s[b]=p;
		return String.valueOf(s);
	}
	static int bfs(String start) {
		Map<String,Integer> dis=new HashMap<>();
		Queue<String> q=new LinkedList<>();
		String end="123804765";
		q.add(start);
		dis.put(start, 0);
		int dx[]= {0,-1,0,1},dy[]= {1,0,-1,0};
		while(!q.isEmpty()) {
			String t=q.poll();
			int distance=dis.get(t);
			if(t.equals(end)) return distance;
			int size=t.indexOf('0');
			int x=size/3,y=size%3;
			for(int i=0;i<4;i++) {
				int a=x+dx[i],b=y+dy[i];
				if(a>=0&&a<3&&b>=0&&b<3) {
					t=swap(t,size,a*3+b);
					if(dis.get(t)==null) {
						q.add(t);
						dis.put(t, distance+1);
					}
					t=swap(t,size,a*3+b);
				}
			}
		}
		return -1;
	}
	public static void main(String[]agrs) throws IOException {
		BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
		String start=bf.readLine();
		System.out.println(bfs(start));
	}
}
2023/2/2 15:16
加载中...