마방진 이란
구로디지털단지역 오엔제이프로그래밍 실무교육센터
(Java , Oracle, SQL, Oracle Tuning, BackUP& Recovery, ASP.NET,
C#, C#Network ,채용확정 무상교육)
www.onjprograamming.co.kr
www.onjprograamming.co.kr
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("");
}
}
}
댓글 없음:
댓글 쓰기