문제를 본 순간부터 시간을 체크..--;;
누구든 코멘트해도 상관없다는..^^;;
~cpp //12:50 //1:25 # include <stdio.h> # include <conio.h> # define SIZE 8 char P[SIZE][SIZE]; char Q[SIZE]; int c; int Check(int in) { int re=0; for(int i=c;i>0;i--){ if((in-i)>=0 && P[c-i][in-i] ==1){//왼쪽으로.. return 0; } if( (in+i)<SIZE && P[c-i][in+i]==1 ){//오른쪽으로.. return 0; } } if (i==0) return 1; return 0; } int EQ() { int re; for(int i=0;i<SIZE;i++){ if(Q[i]==1) continue;// 그 줄에 queen 이있는것이므로 다음칸으로.. //없으면..그자리에 놓아서 걸리는지 체크.. if(Check(i)>0 ){//I 에 놓을수 있을때.. Q[i]=1; P[c][i]=1; c++; if(c==SIZE){//이때는 찾은 것임.. return 1; } re=EQ(); if (re==1) return 1; c--; Q[i]=0; P[c][i]=0; } } return 0; } void Init() { for (int i=0;i<SIZE;i++){ for(int j=0;j<SIZE;j++) P[i][j]=0; Q[i]=0; } c=0; } void RESULT() { for(int i=0;i<SIZE;i++){ for(int j=0;j<SIZE;j++)printf("%d ",P[i][j]); printf("\n"); } } void main(void) { Init(); EQ(); RESULT(); getch(); return; }
아래것은 두번째 문제인데..
EQ() 함수에서 return 1 하는 대신 계속 풀도록 하고..
마지막에 도착했을때만 결과를 출력하도록 수정하였다.
그리고 메인함수에서 결과 출력하는 루틴은 제거 하였다.
EQ() 함수에서 return 1 하는 대신 계속 풀도록 하고..
마지막에 도착했을때만 결과를 출력하도록 수정하였다.
그리고 메인함수에서 결과 출력하는 루틴은 제거 하였다.
~cpp //12:50 //1:25 # include <stdio.h> # include <conio.h> # define SIZE 8 char P[SIZE][SIZE]; char Q[SIZE]; int c; void RESULT() { static int count=0; count++; printf("solv %d\n",count); for(int i=0;i<SIZE;i++){ for(int j=0;j<SIZE;j++)printf("%d ",P[i][j]); printf("\n"); } printf("\n"); } int Check(int in) { int re=0; for(int i=c;i>0;i--){ if((in-i)>=0 && P[c-i][in-i] ==1){//왼쪽으로.. return 0; } if( (in+i)<SIZE && P[c-i][in+i]==1 ){//오른쪽으로.. return 0; } } if (i==0) return 1; return 0; } int EQ() { int re; for(int i=0;i<SIZE;i++){ if(Q[i]==1) continue;// 그 줄에 queen 이있는것이므로 다음칸으로.. //없으면..그자리에 놓아서 걸리는지 체크.. if(Check(i)>0 ){//I 에 놓을수 있을때.. Q[i]=1; P[c][i]=1; c++; if(c==SIZE){//이때는 찾은 것임.. // return 1; RESULT(); } re=EQ(); // if (re==1) return 1; c--; Q[i]=0; P[c][i]=0; } } return 0; } void Init() { for (int i=0;i<SIZE;i++){ for(int j=0;j<SIZE;j++) P[i][j]=0; Q[i]=0; } c=0; } void main(void) { Init(); EQ(); // RESULT(); getch(); return; }