프로그래밍

 3198, 1/160 회원가입  로그인  
   gg5085
   스도쿠

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=6536 [복사]


for문 만을 이용해서 스도쿠를 짜고 있는데요

#include <stdio.h>
#include <stdlib.h>
#include <time.h>



int main()
{
        srand(time(NULL));
                int a[9][9] = {0}, i, j, k, m;

        for (i=0 ; i<9 ; i++)
                for (j=0 ; j<9 ; j++){
                        a[i][j] = rand() %9+1;          // ?쒕뜡?쇰줈 媛??앹꽦
                                
                        
                        for ( k=0 ; k<j ; k++)
                                                if ( a[i][j] == a[i][k])
                                                        j--;
                                                        
                        for ( m=0 ; m<i ; m++)
                                        if ( a[i][j] == a[m][j])
                                                j--;
                }
                                                
        for (i=0 ; i<9 ; i++)
                for (j=0 ; j<9 ; j++){
                        printf("%d ", a[i][j]);
                        printf("\n");}
return 0;
}

가로하고 세로만 해봤는데 왜 이게 무한루프를 돌게 되는지 문제를 모르겠어요


  Hit : 5279     Date : 2015/05/19 10:46



    
hogil123 해결하셨으려나 싶네요 . 3중 for문을 사용하셔서
중복값에 대한 처리를 하신거 같은데 3번째 for에서 j값 처리를 계속 해서 그래보이네요 .
현재 배열의 값을 가로행 , 세로행 검사를 하며 중복값이 있을시에 j값에 변화를 줌으로써
현재 위치한 배열위치를 변화 시키는데
배열위치를 변화시키기 보다, 앞에 있는 값일 경우 현재위치의 배열에 새로운 값을 뽑도록 하시는게 더 좋아보이네요 .

로직 문제이다 보니 ... 생각외로 간단하게 처리 가능하세요

사각형의 끝점 00, 09, 90, 99 부분만 대각행의 중복방지 처리 해주시고

나머지는 가로행, 세로행의 검사만 해주시면 됩니다 .

열심히 하셔요 ~
2015/05/27