C언어 알고리즘 정리 및 실무 프로젝트

C언어의 완전탐색(exhaustive search) 알고리즘 (순열, 재귀함수) 본문

C언어 알고리즘

C언어의 완전탐색(exhaustive search) 알고리즘 (순열, 재귀함수)

C's everything! 2023. 6. 13. 10:42
반응형

완전탐색 알고리즘 중에 하나인 순열 알고리즘입니다.

C언어에서 재귀함수를 이용하여 구현했습니다.

perm 함수 매개변수 설명
          - char arr[] : 데이터를 담은 배열
          - int depth: 교환작업이 일어나는 곳의 깊이 ( ex: A B C의 경우, A는 깊이 0, B는 깊이 1, C는 깊이 2 )
          - int n: 배열 요소의 개수

swap 함수 매개변수 설명
          - char[] arr: 데이터를 담은 배열
          - int i: 배열 인덱스 i
          - int j: 배열 인덱스 j

****** 궁금하신 사항은 댓글에 적어주세요. ******

#include <stdio.h>
#include <string.h>

void perm(char[],int,int);  // 깊이를 파고들면서 탐색
void swap(char[],int,int);  // 위치를 바꿈

int main(){
	char arr[] = {'A','B','C','D'};
	
	perm(arr,0,strlen(arr)); 
}

void perm(char arr[], int depth, int n){    // 매개변수:  배열, 교환작업이 일어나는 깊이, 배열 요소의 개수
    
    if(depth == n){	// 모든 깊이를 순회하면 탈출
        printf("%s\n",arr);
        return;
    }
    
    for(int i = depth; i < n; i++){
        swap(arr,i,depth);
        perm(arr,depth+1,n);
        swap(arr,i,depth);
    }
	    
}

void swap(char arr[],int i,int j){
	    char temp = arr[i];
	    arr[i] = arr[j];
	    arr[j] = temp;
}
반응형
Comments