Untitled
unknown
plain_text
2 years ago
5.3 kB
4
Indexable
// Thong Tri Khu Vuc package ThongTriKhuVuc; import java.util.Scanner; class MyQueue{ private int size; private int[] array; private int in; private int out; public MyQueue(int size) { this.size = size; array=new int[size]; in=-1; out=-1; } public void push(int x) { in++; array[in]=x; } public int pop() { out++; return array[out]; } public boolean isEmpty() { if(in==out) { return true; } return false; } public void reset() { in=out=-1; } } public class test { static int N; static int[][] map=new int[100][100]; static int[][] vs=new int[100][100]; static int[] soLan=new int[6]; static MyQueue queueX=new MyQueue(10000); static MyQueue queueY=new MyQueue(10000); static MyQueue queueX1=new MyQueue(10000); static MyQueue queueY1=new MyQueue(10000); static int[] dx= {0,-1,0,1}; static int[] dy= {-1,0,1,0}; static int count=0; //reset solan static void RSsolan() { for(int i=0;i<=5;i++) { soLan[i]=0; } } //reset visit static void RSvisit() { for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { vs[i][j]=0; } } } //BFS static void BFS_0(int x,int y) { queueX.reset(); queueY.reset(); queueX.push(x); queueY.push(y); vs[x][y]=count; while(!queueX.isEmpty()) { int xx=queueX.pop(); int yy=queueY.pop(); for(int i=0;i<4;i++) { int r=xx+dx[i]; int c=yy+dy[i]; if(r<0 || r>=N || c<0 || c>=N ) continue; if(map[r][c]==0 && vs[r][c]==0) { queueX.push(r); queueY.push(c); vs[r][c]=count; } else if(map[r][c]!=0 && vs[r][c]==0) { soLan[map[r][c]]++; BFS_1(r,c); } } } } //BFS_vung static void BFS_1(int x,int y) { queueX1.reset(); queueY1.reset(); queueX1.push(x); queueY1.push(y); vs[x][y]=1; while(!queueX1.isEmpty()) { int xx=queueX1.pop(); int yy=queueY1.pop(); for(int i=0;i<4;i++) { int r=xx+dx[i]; int c=yy+dy[i]; if(r<0 || r>=N || c<0 || c>=N ) continue; if(map[r][c]==map[xx][yy]&& vs[r][c]==0) { queueX1.push(r); queueY1.push(c); vs[r][c]=1; soLan[map[r][c]]++; } } } } //BFS Gan static void BFS_Gan(int x,int y,int val) { queueX1.reset(); queueY1.reset(); queueX1.push(x); queueY1.push(y); map[x][y]=val; while(!queueX1.isEmpty()) { int xx=queueX1.pop(); int yy=queueY1.pop(); for(int i=0;i<4;i++) { int r=xx+dx[i]; int c=yy+dy[i]; if(r<0 || r>=N || c<0 || c>=N ) continue; if(map[r][c]==0 && vs[r][c]==count) { queueX1.push(r); queueY1.push(c); map[r][c]=val; } } } } //main public static void main(String[] args) { Scanner sc=new Scanner(System.in); int T=sc.nextInt(); for(int tc=0;tc<T;tc++) { N=sc.nextInt(); for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { map[i][j]=sc.nextInt(); } } RSvisit(); count=2; for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { if(map[i][j]==0 && vs[i][j]==0) { RSsolan(); BFS_0(i, j); for(int m=0;m<N;m++) { for(int n=0;n<N;n++) { if(map[m][n]!=0 && vs[m][n]==1) { vs[m][n]=0; } } } int max=0; int tmp=0; for(int m=0;m<=5;m++) { if(soLan[m]>=max) { max=soLan[m]; tmp=m; } } BFS_Gan(i, j, tmp); count++; } } } RSvisit(); int ans=0; for(int m=0;m<N;m++) { for(int n=0;n<N;n++) { if(vs[m][n]==0) { ans++; BFS_1(m, n); } } } System.out.println("Case #"+(tc+1)); System.out.println(ans); } } } //Sky force package SkyForce; import java.util.Scanner; public class test { static int N; static int[][] map=new int[100][5]; static int[][] vs=new int[100][5]; static int ans=0; static int[] dy= {-1,0,1}; static void reset() { for(int i=0;i<N;i++) { for(int j=0;j<5;j++) { vs[i][j]=0; } } } static void backtrack(int r,int c,int sum,int sobom) { if(r==0 && c>=0 && c<5) { if(sum>ans) { ans=sum; } return; } if(sum<0) { return; } for(int i=0;i<2;i++) { if(i==0) { for(int j=0;j<3;j++) { c=c+dy[j]; if(r-1>=0 && c>=0 && c<5 && map[r-1][c]!=2) { backtrack(r-1, c, sum+map[r-1][c], sobom); } else if(r-1>=0 && c>=0 && c<5 && map[r-1][c]==2){ backtrack(r-1, c, sum-1, sobom); } c=c-dy[j]; } } else if(i==1 && sobom>0) { if(r<5) { for(int j=0;j<r;j++) { for(int k=0;k<5;k++) { if(map[j][k]==2) { map[j][k]=0; vs[j][k]=1; } } } } else { for(int j=r;j>=r-5;j--) { for(int k=0;k<5;k++) { if(map[j][k]==2) { map[j][k]=0; vs[j][k]=1; } } } } for(int j=0;j<3;j++) { c=c+dy[j]; if(r-1>=0 && c>=0 && c<5 && map[r-1][c]!=2) { backtrack(r-1, c, sum+map[r-1][c], sobom-1); } else if(r-1>=0 && c>=0 && c<5 && map[r-1][c]==2){ backtrack(r-1, c, sum-1, sobom-1); } c=c-dy[j]; } for(int j=0;j<N;j++) { for(int k=0;k<5;k++) { if(vs[j][k]==1) { map[j][k]=2; vs[j][k]=0; } } } } } } public static void main(String[] args) { Scanner sc=new Scanner(System.in); int tc=sc.nextInt(); for(int i=0;i<tc;i++) { N=sc.nextInt(); for(int j=0;j<N;j++) { for(int k=0;k<5;k++) { map[j][k]=sc.nextInt(); } } reset(); ans=-1; backtrack(N,2,0,1); System.out.println("Case #"+(i+1)); System.out.println(ans); } } }
Editor is loading...