package test.aglorith;
public class Recall {
static int solution_nums=0;
static boolean[][] pan=new boolean[8][8];
//设置入口函数
static void first(int i,int j){
pan[i][j]=true;
//up
goNext(i-1, j, 1);
//down
goNext(i+1, j, 1);
//left
goNext(i, j-1, 1);
//right
goNext(i, j+1, 1);
}
static void goNext(int i,int j,int nums){
//判断是否越界,是否走过
if ((i>=0&i<8) && (j>=0&j<8) && pan[i][j]==false) {
pan[i][j]=true;
nums++;
//判断是否走遍了所有格子
if (nums==64) {
solution_nums++;
System.err.println(solution_nums+"~~");
pan[i][j]=false;
return;
}
//up
goNext(i-1, j, nums);
//down
goNext(i+1, j, nums);
//left
goNext(i, j-1, nums);
//right
goNext(i, j+1, nums);
//做好扫尾工作,擦除走过的轨迹
pan[i][j]=false;
}
}
public static void main(String[] args) {
first(0, 0);//假设从(0,0)点开始
System.err.println(solution_nums);
}
}
|
public static void mergeSort(int[] data) {
mergeSort(data, 0, data.length - 1);
}
private static void mergeSort(int[] data, int low, int high) {
if (low < high) {
int mid = (low + high) / 2;
mergeSort(data, low, mid);
mergeSort(data, mid + 1, high);
merge(data, low, mid, high);
}
}
// 合并
public static void merge(int[] data, int start, int mid, int end) {
int tmp[] = new int[end - start + 1];
int i = start;
int j = mid + 1;
int k = 0;
while (i <= mid && j <= end) {
if (data[i] < data[j]) {
tmp[k++] = data[i++];
} else {
tmp[k++] = data[j++];
}
}
//拷贝左边数组的值
while (i <= mid) {
tmp[k] = data[i];
k++;
i++;
}
//拷贝右边数组的值
while (j <= end) {
tmp[k] = data[j];
k++;
j++;
}
// 重新赋值给data
int m = 0;
for (int n = start; n <= end; n++) {
data[n] = tmp[m++];
}
}
|