Em mới học Java nên thử chuyển 1 đoạn code từ C++ trước đây sang Java nhưng bị lỗi:
Đề bài: https://www.spoj.com/PTIT/problems/PTIT018K/
Bài làm:
// package Spoj;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
class Solve{
private static int n,S,E;
private static int a[]=new int[1005],mark[]=new int[1005];
static void Init(){
Scanner scanner=new Scanner(System.in);
n=scanner.nextInt();
S=scanner.nextInt();
E=scanner.nextInt();
for (int i = 1; i <=n ; i++) {
a[i]=scanner.nextInt();
}
}
static void res(){
// for (int i = 1; i <=n ; i++) {
// mark[i]=0;
// }
mark[0]=-1;
mark[n+1]=-1;
mark[S]=1;
Queue<Integer> q=new LinkedList<Integer>();
q.add(S);
while(!q.isEmpty()){
int u=q.remove();
if(u==E){
System.out.println((mark[E]-1));
return;
}
if(mark[u-1]==0){
mark[u-1]=mark[u]+1;
q.add(u-1);
}
if(mark[u+1]==0){
mark[u+1]=mark[u]+1;
q.add(u+1);
}
for(int i=1;i<=n;i++){
if(mark[i]==0&&a[i]==a[u]){
mark[i]=mark[u]+1;
q.add(i);
}
}
}
}
}
class Main {
public static void main(String[] args) throws java.lang.Exception{
Scanner scanner=new Scanner(System.in);
int T=scanner.nextInt();
while (T>0){
T--;
Solve a=new Solve();
a.Init();
a.res();
}
}
}
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?