标签:begin 201512 游戏 int 棋子 方格 棋盘 消除
问题描述
消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被消除时,这些地方的棋子将同时被消除。
现在给你一个n行m列的棋盘,棋盘中的每一个方格上有一个棋子,请给出经过一次消除后的棋盘。
请注意:一个棋子可能在某一行和某一列同时被消除。
输入格式
输入的第一行包含两个整数n, m,用空格分隔,分别表示棋盘的行数和列数。
接下来n行,每行m个整数,用空格分隔,分别表示每一个方格中的棋子的颜色。颜色使用1至9编号。
输出格式
输出n行,每行m个整数,相邻的整数之间使用一个空格分隔,表示经过一次消除后的棋盘。如果一个方格中的棋子被消除,则对应的方格输出0,否则输出棋子的颜色编号。
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int m=in.nextInt();
int[][] chessBoard=new int[n][m];
boolean[][] result=new boolean[n][m];
for(int i=0;i<n;i++) {
for(int j=0;j<m;j++) {
chessBoard[i][j]=in.nextInt();
}
}
int begin=0;
int end=0;
for(int i=0;i<n;i++) {//横向消除
begin=0;
end=0;
for(int j=1;j<m;j++) {
if(chessBoard[i][j]==chessBoard[i][j-1]) {
end=j;
}else {
if(end-begin+1>=3) {//消除
for(int k=begin;k<=end;k++) {
result[i][k]=true;
}
begin=j;
end=j;
}else {//更新指针
begin=j;
end=j;
}
}
}
if(end==m-1&&(end-begin+1)>=3) {//消除
for(int k=begin;k<=end;k++) {
result[i][k]=true;
}
}
}
for(int i=0;i<m;i++) {
begin=0;
end=0;
for(int j=1;j<n;j++) {
if(chessBoard[j][i]==chessBoard[j-1][i]) {
end=j;
}else {
if(end-begin+1>=3) {//消除
for(int k=begin;k<=end;k++) {
result[k][i]=true;
}
begin=j;
end=j;
}else {//更新指针
begin=j;
end=j;
}
}
}
if(end==n-1&&(end-begin+1)>=3) {//消除
for(int k=begin;k<=end;k++) {
result[k][i]=true;
}
}
}
for(int i=0;i<n;i++) {
for(int j=0;j<m;j++) {
if(!result[i][j]) {
System.out.print(chessBoard[i][j]+" ");
}else {
System.out.print(0+" ");
}
}
System.out.println();
}
in.close();
}
}
标签:begin,201512,游戏,int,棋子,方格,棋盘,消除 来源: https://blog.csdn.net/qq_41056867/article/details/100732432
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。