public class Marquee {
int[][] matrix;
int n ; //走過的步數
int time;//控制結束的一個參數
int rank ; //階
coordinate start;//起始點
public static void main(String[] s) {
a ma = new a(12,new coordinate(0,0) );
coordinate temp = ma.start;
while(true) {
int oldTime = ma.time();
///在這裡給出你的步驟
temp = ma.rightOf(temp);
temp = ma.downOf(temp);
temp = ma.leftOf(temp);
temp = ma.upOf(temp);
//
if( oldTime == ma.time() ) break;
}
ma.print();
}
a(int rank,coordinate start) {
n = 1;
this.rank = rank;
matrix = new int[rank][rank];
time = n;
this.start = start;
matrix[start.x][start.y] = n;
}
public int time() {
return this.time;
}
public void print() {
for(int i =0; i<this.rank; i++) {
System.out.println();
for (int j =0; j<this.rank; j++) {
System.out.print(this.matrix[i][j]+" ");
}
}
}
//把矩陣看做座標系
//從xyRightFrom座標開始向右走,直到碰到邊界或者已經當地當前點已被寫
//四個類似作用的方法
private coordinate rightOf(coordinate xyRightFrom) {//xyRightFrom向右的起始點
int i = xyRightFrom.x;
int j = xyRightFrom.y;
while(j+1<rank && matrix[i][j+1]==0 ){
n++;
matrix[i][++j] = n;
}
if ( matrix[i][j] == 0) matrix[i][j] = ++n;
time = n;
return new coordinate(i,j);
}
private coordinate downOf(coordinate xyDownFrom) {
int i = xyDownFrom.x;
int j = xyDownFrom.y;
while( i+1<rank && matrix[i+1][j] ==0 ){
n++;
matrix[++i][j] = n;
}
if ( matrix[i][j] == 0) matrix[i][j] = ++n;
time = n;
return new coordinate(i,j);
}
private coordinate leftOf(coordinate xyLeftFrom) {
int i = xyLeftFrom.x;
int j = xyLeftFrom.y;
while( j-1>=0 && matrix[i][j-1] ==0) {
n++;
matrix[i][--j] = n;
}
if ( matrix[i][j] == 0) matrix[i][j] = ++n;
time = n;
return new coordinate(i,j);
}
private coordinate upOf(coordinate xyUpFrom) {
int i = xyUpFrom.x;
int j = xyUpFrom.y;
while( i-1 >=0 && matrix[i-1][j] ==0 ) {
n++;
matrix[--i][j] = n;
}
if ( matrix[i][j] == 0) matrix[i][j] = ++n;
time = n;
return new coordinate(i,j);
}
}
class coordinate {
int x;
int y;
coordinate(int x,int y) {
this.x = x;
this.y = y;
}
}