일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- C언어
- Time
- 콘솔
- 셀
- C
- 파일입출력
- 알고리즘
- 함수
- 문자열
- 구현
- 연결리스트
- 3차원 배열
- 포인터
- 공백
- 이진탐색#binary_search
- 커서
- 버블
- Windows API
- 삽입
- string
- 배열
- crud
- 테트리스
- 오목#함수#gotoxy#금수#알고리즘#2차원#배열#실무#프로젝트
- 구조체
- 선택
- 정렬
- 난수
- scanf
Archives
- Today
- Total
C언어 알고리즘 정리 및 실무 프로젝트
C언어의 완전탐색(exhaustive search) 알고리즘 (순열, 재귀함수) 본문
반응형
완전탐색 알고리즘 중에 하나인 순열 알고리즘입니다.
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;
}
반응형
'C언어 알고리즘' 카테고리의 다른 글
C언어의 이진탐색(binary search) 알고리즘 (1) | 2023.05.10 |
---|---|
C언어의 병합정렬 (merge_sort) 알고리즘 (0) | 2022.06.25 |
C언어 포인터를 활용한 문자열 관련 함수(strcpy, strcat, strcmp, strncmp, strlen) 직접 구현하기 (4) | 2022.05.20 |
C언어 이중 for문과 배열을 이용한 달팽이 배열 알고리즘 (0) | 2022.05.20 |
C언어 연결리스트 구현(포인터에 대한 완벽 이해) (0) | 2022.04.20 |
Comments