听同学说了一道算法题,大概的意思是在一个N*M矩阵中,这个矩阵中一共有三种元素,{0,1,2},有以下规则:
求解:
输出
本题有两种做法,第一种,暴力破解法,也就是我同学分享的一种做法,即完全模拟题目中的步骤流程,用两个矩阵轮流进行暴力破解,该方法操作简单,容易实现,但是算法复杂度比较高,这里不再赘述,主要讲第二种方法,图的广度优先搜索算法。
算法思想:
static Random random = new Random(System.currentTimeMillis());
/**
* 产生初始元素
* @return
*/
static int getInitElem(){
int bound = 10;
// 0,1,2
int rate[] = {
2,8};
int key = random.nextInt(bound);
if(0<=key&&key<rate[0]){
return 0;
}else if(0<=key&&key<rate[1]){
return 1;
}else{
return 2;
}
}
/**
* 产生一个n*n的方阵
* @param n 方阵维度
* @return
*/
public static int[][] createMatrix(int n,int m){
int matrix[][] = new int[n][];
for (int i = 0; i < matrix.length; i++) {
matrix[i] = new int[m];
}
for (int i = 0; i < matrix.length; i++) {
int row[] = matrix[i];
for (int j = 0; j < row.length; j++) {
row[j] = getInitElem();
}
}
dispalyMatrix(matrix);
return matrix;
}
/**
* 显示矩阵,进行数据格式化,用于生成数据
* @param matrix
*/
static void dispalyMatrix(int[][] matrix){