场景
实际业务中,有一个任务,这个任务有排期(天)和广告位两个维度,并且每个任务都有一个字段a,要求在一个连续的排期和连续的广告位中,a字段设置各不相同。
举例
1 2 3 4
a a1 a2 a3 a4
b b1 b2 b3 b4
c c1 c2 c3 c4
d d1 d2 d3 d4
行表示天,列表示广告位,要求每一行每一列各不相同,并且a的取值范围为n(n表示该对称矩阵的行数)
代码
期望结果
0123
1032
2301
3210
代码
public class TestMatrix {
// 深度优先搜索 返回对称矩阵
private static boolean dcMatrix(int rank,int[][] arr,int i,int j){
if (j < rank - 1) {
j++;
} else if (i < rank - 1) {
i++;
j=0;
} else {
return true;
}
for(int k=0;k<rank;k++){
arr[i][j] = k;
if(check(i,j,arr)){
if(dcMatrix(rank,arr,i,j)){
return true;
}
}
}
return false;
}
private static boolean check(int i,int j,int[][] arr){
for(int k=0;k<i;k++){
if(arr[k][j] == arr[i][j]){
return false;
}
}
for(int k=0;k<j;k++){
if(arr[i][k] == arr[i][j]){
return false;
}
}
return true;
}
public static void main(String[] args) {
int[][] arr = new int[5][5];
dcMatrix(5,arr,0,-1);
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr.length;j++){
System.out.print(arr[i][j]);
}
System.out.println();
}
}
}