您的位置:首页 > 其它

网易游戏2016实习生招聘在线笔试之连连看

2015-05-18 15:22 357 查看

连连看

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class Main {

public static void main(String[] argv){
Scanner in = new Scanner(System.in);
int x = in.nextInt();
int y = in.nextInt();
int [][] source = new int[x+2][y+2];
int [][] R_has = new int[x+2][y+2];
for(int i=1; i<=x;i++){
for(int j=1; j<=y;j++){
source[i][j]=in.nextInt();
}
}
int a = in.nextInt();
int b = in.nextInt();
int c = in.nextInt();
in.close();
int Num = source[a][b];
int[][][] dis = new int[4][x+2][y+2];
Queue<Integer> temp = new LinkedList<Integer>();
Queue<Integer> result = new LinkedList<Integer>();
temp.offer(a);
temp.offer(b);
dis[0][a][b]=1;
dis[1][a][b]=1;
dis[2][a][b]=1;
dis[3][a][b]=1;
while(true){
if(temp.size()==0)
break;
int N_x = temp.poll();
int N_y = temp.poll();
System.out.println("temp 出队:"+N_x+N_y+"      并开始匹配");
//up adding
if(N_x-1>=0&&(source[N_x-1][N_y]==0||source[N_x-1][N_y]==Num)){

System.out.println("up匹配:  ");
int min=0;
if(dis[2][N_x][N_y]>0)
min=dis[2][N_x][N_y];
if(dis[1][N_x][N_y]>0){
if(min==0)
min=dis[1][N_x][N_y]+1;
else{
if(dis[1][N_x][N_y]+1<min)
min=dis[1][N_x][N_y]+1;
}
}
if(dis[3][N_x][N_y]>0){
if(min==0)
min=dis[3][N_x][N_y]+1;
else{
if(dis[3][N_x][N_y]+1<min)
min=dis[3][N_x][N_y]+1;
}
}
if(min<=c){
if(source[N_x-1][N_y]==0){
int S_up=dis[2][N_x-1][N_y];
dis[2][N_x-1][N_y]=min;
if( S_up!=min){
System.out.println("temp 队列 add:"+(N_x-1)+" "+N_y);
temp.offer(N_x-1);
temp.offer(N_y);
}

}
else{
if(R_has[N_x-1][N_y]==0){
result.add(N_x-1);
result.add(N_y);
R_has[N_x-1][N_y]=1;
}
}
}

}

//down adding
if(N_x+1<x+2&&(source[N_x+1][N_y]==0||source[N_x+1][N_y]==Num)){

System.out.println("down匹配:  ");
int min=0;
if(dis[0][N_x][N_y]>0)
min=dis[0][N_x][N_y];
if(dis[1][N_x][N_y]>0){
if(min==0)
min=dis[1][N_x][N_y]+1;
else{
if(dis[1][N_x][N_y]+1<min)
min=dis[1][N_x][N_y]+1;
}
}
if(dis[3][N_x][N_y]>0){
if(min==0)
min=dis[3][N_x][N_y]+1;
else{
if(dis[3][N_x][N_y]+1<min)
min=dis[3][N_x][N_y]+1;
}
}
if(min<=c){
if(source[N_x+1][N_y]==0){
int S_down=dis[0][N_x+1][N_y];
dis[0][N_x+1][N_y]=min;
if(S_down!=min){
System.out.println("temp 队列 add:"+(N_x+1)+" "+N_y);
temp.offer(N_x+1);
temp.offer(N_y);
}

}
else{
if(R_has[N_x+1][N_y]==0){
result.add(N_x+1);
result.add(N_y);
R_has[N_x+1][N_y]=1;
}

}
}
}
//right adding
if(N_y+1<y+2&&(source[N_x][N_y+1]==0||source[N_x][N_y+1]==Num)){

System.out.println("right匹配:  ");
int min=0;
if(dis[3][N_x][N_y]>0)
min=dis[3][N_x][N_y];
if(dis[0][N_x][N_y]>0){
if(min==0)
min=dis[0][N_x][N_y]+1;
else{
if(dis[0][N_x][N_y]+1<min)
min=dis[0][N_x][N_y]+1;
}
}
if(dis[2][N_x][N_y]>0){
if(min==0)
min=dis[2][N_x][N_y]+1;
else{
if(dis[2][N_x][N_y]+1<min)
min=dis[2][N_x][N_y]+1;
}
}
//System.out.println("min: "+min);
if(min<=c){
if(source[N_x][N_y+1]==0){
int S_right=dis[3][N_x][N_y+1];
dis[3][N_x][N_y+1]=min;
if(S_right!=min){
System.out.println("temp 队列 add:"+N_x+" "+(N_y+1));
temp.offer(N_x);
temp.offer(N_y+1);
}

}
else{
if(R_has[N_x][N_y+1]==0){
result.add(N_x);
result.add(N_y+1);
R_has[N_x][N_y+1]=1;
}

}
}
}
//left adding
if(N_y-1>=0&&(source[N_x][N_y-1]==0||source[N_x][N_y-1]==Num)){

System.out.println("left匹配:  ");
int min=0;
if(dis[1][N_x][N_y]>0)
min=dis[1][N_x][N_y];
if(dis[0][N_x][N_y]>0){
if(min==0)
min=dis[0][N_x][N_y]+1;
else{
if(dis[0][N_x][N_y]+1<min)
min=dis[0][N_x][N_y]+1;
}
}
if(dis[2][N_x][N_y]>0){
if(min==0)
min=dis[2][N_x][N_y]+1;
else{
if(dis[2][N_x][N_y]+1<min)
min=dis[2][N_x][N_y]+1;
}
}
if(min<=c){
if(source[N_x][N_y-1]==0){
int S_left=dis[1][N_x][N_y-1];
dis[1][N_x][N_y-1]=min;
if(S_left!=min){
System.out.println("temp 队列 add:"+N_x+" "+(N_y-1));
temp.offer(N_x);
temp.offer(N_y-1);
}

}
else{
if(R_has[N_x][N_y-1]==0){
result.add(N_x);
result.add(N_y-1);
R_has[N_x][N_y-1]=1;
}

}

}
}
System.out.println("");
}

/*
for(Integer string : result){
System.out.println(string);
}
*/
System.out.println("最终的结果:  "+(result.size()-2)/2);
}

}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐