n 개 요 소 를 생 성 하 는 전체 배열 C 구현

3082 단어 c알고리즘
최근 알고리즘 디자인 을 복습 하 는 시험 을 준비 하고 있 습 니 다. 아래 에 기록 하고 필 기 를 볼 때 갑자기 떠 오 르 는 해법 입 니 다.문 제 는 이러한 재 귀적 으로 n 개 요소 의 전체 배열 을 실현 하 는 것 이다.
당시 선생님 께 서 내 놓 으 신 해답 은 i 번 째 요소 인 리 를 최 우선 으로 가정 하 는 것 이 었 습 니 다. 그래서 f (r1, r2,..., rn) = f (ri U {r1, r2,..., rn) = U (ri & f (r1, r2,..., rn) 는 알 아 들 었 을 것 입 니 다. 그런데 지금 이 필 기 를 보고 또 취 했 습 니 다.(이 물건 이 내 가 수업 시간 에 쓴 노트 라 니.....)
나중에 스스로 곰 곰 이 생각해 보면 사실은 매우 간단 한 문제 이다. 역 추적 법 을 이용 하여 문 제 를 하나의 배열 나무 로 보면 쉽게 해결 할 수 있다.아래 에 원본 코드 를 놓 습 니 다. 이것 은 C 로 이 루어 진 것 입 니 다. C + + 를 사용 하기 가 정말 귀 찮 습 니 다.
// =====================【    】==================
// @ author : zhyh2010
// @ date : 20150606
// @ version : 1.0
// @ description : 
// =====================【   】==================

#include <stdio.h>
#include <stdlib.h>

#define NUM 4
char arr[NUM] = { 0 };

int m_solution_num = 0;

void init()
{
    for (int i = 0; i != NUM; i++)
    {
        arr[i] = 'A' + i;
    }
}

void output()
{
    printf(" %d   :
"
, ++m_solution_num); for (int i = 0; i != NUM; i++) { printf("%c\t", arr[i]); } printf("
"
); } void swap(char * a, char * b) { char aa = *a; char bb = *b; aa = aa ^ bb; bb = aa ^ bb; aa = aa ^ bb; *a = aa; *b = bb; } void solve(int curpos) { if (curpos >= NUM) { output(); return; } // 0, curpos for (int i = curpos; i != NUM; i++) { swap(&arr[curpos], &arr[i]); solve(++i); --i; swap(&arr[curpos], &arr[i]); } } void main() { init(); solve(0); }

좋은 웹페이지 즐겨찾기