게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
집합의 순열 질문드립니다.. ㅜㅜ
게시물ID : programmer_17354짧은주소 복사하기
작성자 : 콤퓨타문법인
추천 : 0
조회수 : 452회
댓글수 : 1개
등록시간 : 2016/05/24 16:13:44
옵션
  • 본인삭제금지

//에졔  1.4
#include <stdio.h>
void perm(char *list, int i, int n);
#define SWAP(x,y,t) ((t)=(x),(x)=(y),(y)=(t))
int main()
{
 char list[3] = { 'a','b','c' };
 perm(list, 0, 2);
   
}

void perm(char *list,int i,int n)
//*list[i]에서 list[n]까지의 모든 순열을 생성
{
 int j, temp;
 if (i == n) {
  for (j = 0; j <= n; j++)
   printf("%c",list[j]);
  printf("  \n");
 }
 else
  //list[i]에서  list[n]까지에 둘 이상의 순열이 있으면  이것을 순환적으로 생성
  for (j = i; j <= n; j++) {
   SWAP(list[i], list[j], temp);
   perm(list, i + 1, n);
   SWAP(list[i], list[j], temp);
  }
}

결과는

abc
acb
bac
bca
cba
cab

여기서 abc가 어떻게 나오는지 까지는 이해가 가는데 그 이후부터 어떻게 돌아가는지 모르겟습니다..

perm(list,i+1,n)함수가 2번 재귀호출 된후 abc출력후 다시 돌아가는걸로 알고있는데..2번 되돌아 가야 하는걸로 아는데 1번째 되돌아 갈때 perm밑에

있는 매크로함수 swap를 실행하고 다시 되돌아 가는건지 그냥 바로 2번되돌아가서 perm함수 밑에 swap매크로함수를 출력하는건지.. 머리가 뒤죽박

죽이네요.. ㅜㅜ

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호