细胞阵列程序展示

一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是相同数字则为同一细胞,如:阵列
在这里插入图片描述
有5个细胞,编写程序求给定矩形阵列的细胞个数(函数参数为:二维数组,数组行数,数组列数)。
思路:
1.先遍历数组,判断字符是否是0
2.字符不是0,就顺时针判断是否有相同的字符
3.判断是否是相同字符的同时,删除字符信息
代码示例:

package cn.edu.dgut.cell;

import java.util.Scanner;

public class Cell {
	//String类的一个方法使用,用来实现字符的快速输入
	public static String cell_1;
	//用来实现组织细胞的输入
	public static char[][] cell_2;
	//用来清理细胞中已经遍历的数字,未初始化都是false
	public static boolean[][] cell_3;
	//定义长度,注意只有类成员才可以直接赋值
	public static int row;
	public static int col;
	//定义细胞的数目
	public static int num=0;
	
	//clean方法用来实现对组织的遍历和清除
	public static void clean(int x,int y) {
		//如果条件满足,就结束
		if(cell_3[x][y]==true)
			return;
		
		//修改对应位置为true
		cell_3[x][y]=true;
		//对这个位置的地方顺时针遍历
		//向右遍历
		if(y+1<col) {
			if(cell_2[x][y+1]==cell_2[x][y])
				clean(x,y+1);
		}
		//向下遍历
		if(x+1<row) {
			if(cell_2[x+1][y]==cell_2[x][y])
				clean(x+1,y);
		}
		//向左遍历
		if(y-1>=0) {
			if(cell_2[x][y-1]==cell_2[x][y])
				clean(x,y-1);
		}
		
		return;
	}
	
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		//实例化行和列
		System.out.println("请输入行和列");
		row=sc.nextInt();
		col=sc.nextInt();
		
		cell_2=new char[row][col];
		cell_3=new boolean[row][col];
		
		//初始化组织
		for (int i = 0; i < row; i++) {
			System.out.println("输入序列");
			cell_1=sc.next();
			for (int j = 0; j < col; j++) {
				cell_2[i][j]=cell_1.charAt(j);
			}
		}
		
		//开始寻找细胞的数目
		for (int i = 0; i < row; i++) {
			for (int j = 0; j < col; j++) {
				if(cell_2[i][j]!='0'&&cell_3[i][j]==false) {
					clean(i,j);	
					num++;
				}
			}
			
		}
		
		System.out.println("这个组织有"+num+"种细胞");
	}
}

测试用例:
//每个测试用例包括两部分内容:输入矩阵(包括行数、列数、矩阵),输出
3,4 //3行4列
//矩阵
1 0 0 0
1 2 0 0
0 2 2 1
3 //输出结果

测试用例1
7,7
0 1 0 0 0 0 0
0 1 0 0 4 0 0
0 1 1 0 4 0 0
0 1 8 0 0 0 0
0 0 8 5 5 5 0
0 8 8 8 0 0 0
0 0 8 0 0 0 1
5
测试用例2
3,3
0 1 0
0 1 0
0 1 1
1
测试用例3
3,3
0 0 0
0 0 0
0 0 0
0
测试用例4
5,5
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
1

测试用例5
5,5
1 1 1 1
1 0 1 1
0 1 0 1
1 1 1 1
1
测试用例6
1,10
0 1 0 0 0 0 0 0 0 1
2
测试用例7
10,1
0
1
0
0
1
1
0
0
0
0
2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值