알고리즘(3판)(FOUNDATION OF ALGORITHMS USING C++ PSEUDOCODE) 5장 예제코드 및 연습문제
- 최초 등록일
- 2016.09.15
- 최종 저작일
- 2015.05
- 14페이지/ 한컴오피스
- 가격 1,000원
소개글
알고리즘(3판)(FOUNDATION OF ALGORITHMS USING C++ PSEUDOCODE) 5장 예제코드 및 연습문제
*연습문제는 1번, 4번, 16번, 23번, 30번만 포함되어 있습니다. 착오 없으시길 바랍니다.
목차
1. n - 여왕말 문제
2. m - 색칠하기 문제
3. 5장 연습문제
본문내용
문제: 서양장기판에 어떤 두 여왕말도 같은 행, 열, 대각선에 있지 않도록 n개 여왕말을 놓아라.
입력: 양의 정수 n
출력: n X n 서양장기판에 n개 여왕말을 서로 위협받지 않고 놓을 수 있는 가능한 모든 방법. 각 출력은 인덱스 범위가
1부터 n까지인 정수 배열 col로 이루어진다. 여기서 col[i]는 i번째 행에 있는 여왕말의 놓여 있는 열이다.
void queens(index I){
index j;
if(promissing(i))
if(i == n) cout << col[1] through col[n];
else
for (j=1; j<=n; j++){ //(i+1)번째 행에 있는 여왕말을 n개의 열에
col[i + 1] = j;//놓을 수 있는지 각각 검사
queens(i + 1);
}
}
bool promissing (index I){
index k;
bool switch;
k = 1;
switch = true;//i번째 행에 있는 여왕말을 위협하는
while (k<i && switch){//여왕말이 있는지 검사
if(col[i] == col[k] || abs(col[i] - col[k]) == i - k)
switch = false;
k++
}
return switch;
}
#define n 4//입력값: n행 x n열 서양 장기판에 n개의 여왕말
int col[n+1];//i번째 행에 있는 여왕말이 놓여있는 열
int count=1;
bool promising(int i);
void queens(int i){
int j;
if(promising(i)){
if(i==n){
cout<<endl<<"("<<count<<") ";
count++;
for(j=1; j<=n; j++)
cout<<col[j]<<" ";
}else
for(j=1; j<=n; j++){//(i+1)번째 행에 있는 여왕말을 n개의 열에
col[i+1]=j;//놓을 수 있는지 각각 검사
queens(i+1);
}
}
참고 자료
없음