package com.test;
public class LittleMaSuanFa {
class Holder {
int n;
int hang;
int lie;
public Holder(int n, int hang, int lie) {
this.n = n;
this.hang = hang;
this.lie = lie;
}
}
/***
* 从左到右遍历
*
* @param num
* 将要赋值的num
* @param array
* @param Lhang
* 总行数
* @param Llie
* 总列数
* @param startHang
* 请求节点行数
* @param startLie
* 请求节点列数
* @return
*/
private Holder SetNumLeftToRight(int num, int[][] array, int Lhang,
int Llie, int startHang, int startLie) {
if (startHang >= Lhang || startLie >= Llie) {
return null;
}
if (startLie + 1 < Llie) {
if (array[startHang][startLie + 1] != 0) {
return null;
}
}
int i;
for (i = startLie + 1; i < Llie; i++) {
if (array[startHang][i] != 0) {
return new Holder(num - 1, startHang, i - 1);
}
array[startHang][i] = num++;
}
return new Holder(num - 1, startHang, i - 1);
}
/**
* 从上到下遍历
*
* @param args
*/
private Holder SetNumUpToDown(int num, int[][] array, int Lhang, int Llie,
int startHang, int startLie) {
if (startHang >= Lhang || startLie >= Llie) {
return null;
}
if (startHang + 1 < Lhang) {
if (array[startHang + 1][startLie] != 0) {
return null;
}
}
int i = 0;
for (i = startHang + 1; i < Lhang; i++) {
if (array[i][startLie] != 0) {
return new Holder(num - 1, i - 1, startLie);
}
array[i][startLie] = num++;
}
return new Holder(num - 1, i - 1, startLie);
}
/**
* 从右到左遍历
*
* @param args
*/
private Holder SetNumRightToLeft(int num, int[][] array, int Lhang,
int Llie, int startHang, int startLie) {
if (startHang >= Lhang || startLie >= Llie) {
return null;
}
if (startLie - 1 >= 0) {
if (array[startHang][startLie - 1] != 0) {
return null;
}
}
int i = 0;
for (i = startLie - 1; i >= 0; i--) {
if (array[startHang][i] != 0) {
return new Holder(num - 1, startHang, i + 1);
}
array[startHang][i] = num++;
}
return new Holder(num - 1, startHang, i + 1);
}
/**
* 从下到上
*
* @param args
*/
private Holder SetNumDownToUp(int num, int[][] array, int Lhang, int Llie,
int startHang, int startLie) {
if (startHang >= Lhang || startLie >= Llie) {
return null;
}
if (startHang - 1 >= 0) {
if (array[startHang - 1][startLie] != 0) {
return null;
}
}
int i = 0;
for (i = startHang - 1; i >= 0; i--) {
if (array[i][startLie] != 0) {
return new Holder(num - 1, i + 1, startLie);
}
array[i][startLie] = num++;
}
return new Holder(num - 1, i + 1, startLie);
}
public void print(int[][] array, int hang, int lie) {
for (int i = 0; i < hang; i++) {
String str = "";
for (int j = 0; j < lie; j++) {
str = str + array[i][j] + ",";
}
System.out.println(str);
}
}
public void fuzhi(int[][] array, int Lhang, int Llie, Holder holder) {
holder = SetNumLeftToRight(holder.n + 1, array, Lhang, Llie,
holder.hang, holder.lie);
if (holder != null) {
holder = SetNumUpToDown(holder.n + 1, array, Lhang, Llie,
holder.hang, holder.lie);
} else {
return;
}
if (holder != null) {
holder = SetNumRightToLeft(holder.n + 1, array, Lhang, Llie,
holder.hang, holder.lie);
} else {
return;
}
if (holder != null) {
holder = SetNumDownToUp(holder.n + 1, array, Lhang, Llie,
holder.hang, holder.lie);
} else {
return;
}
if (holder != null) {
fuzhi(array, Lhang, Llie, holder);
} else {
return;
}
}
public void FuzhiFun(int hang, int lie) {
int[][] array = new int[hang][lie];
array[0][0] = 1;
Holder holder = new Holder(1, 0, 0);
fuzhi(array, hang, lie, holder);
print(array, hang, lie);
}
int[][] array = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
public static void main(String[] args) {
LittleMaSuanFa li = new LittleMaSuanFa();
li.FuzhiFun(5, 4);
}
}
1,2,3,4,
14,15,16,5,
13,20,17,6,
12,19,18,7,
11,10,9,8,