마방진
오라클자바커뮤니티에서 설립한 오엔제이프로그래밍
실무교육센터
(신입사원채용무료교육, 오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷)
1에서 N제곱까지의 정수값을 갖는 N*N행렬
각 행의 합, 열의합, 각대각선의 합이 같은 행렬
H. Coxter 알고리즘 이용 구현
아래의 예제는 홀수차 정방향렬의 경우에 해당됩니다...
쩍수인 경우는 4의 배수인 경우에 마방진이 존재하는것으로
알려져 있으며 아래의 방식과는 다른 방법으로 구현되오니
관련 사이트를 참고하시기 바랍니다...
class MaBangJin {
static int[][] a = new int[20][20];
void mabangjin(int n) {
int hng, h; //행
int yul, y; //열
int suja; //채우는 숫자
//0행의 가운데 1을 둔다.
hng = 0;
yul = (n-1)/2;
a[0][yul] = 1;
for(suja=2; suja <= n*n; suja++) {
//현재 행이 제일 위행이면 제일 아래행으로...
//아니면 하나 위 행으로 이동
if (hng ==0) h = n-1;
else h = hng -1;
//현재 열이 제일 왼쪽 열이면 제일 오른쪽 열로
//아니면 하나 왼쪽 열로 이동
if (yul ==0) y = n-1;
else y = yul -1;
//이동후의 위치가 빈칸이면
if (a[h][y] ==0) {
hng = h;
yul = y;
}
else { //빈칸이 아니면 하나 아래 행으로...
hng++;
}
a[hng][yul] = suja;
}
}
public static void main(String[] agrs) {
int value=5, sum=0;
MaBangJin m = new MaBangJin();
m.mabangjin(value);
for(int i=0; i<value; i++) {
for(int j=0;j<value; j++) {
if (a[i][j] < 10) System.out.print(" ");
else System.out.print(" ");
System.out.print(a[i][j]);
}
System.out.println("");
}
}
}
댓글 없음:
댓글 쓰기