본문 바로가기

프로그래밍 언어들/알고리즘 문제풀이

C언어 퍼즐 게임 (puzzle game in C), 퍼즐 맞추기 알고리즘 퍼즐문제 N X N의 숫자판에 1 ~ N²-1까지의 숫자와 빈칸 하나가 주어진다. 숫자를 인접한 빈칸으로 옮기는 작업을 반복함으로 써 목표 숫자판을 만드는 최소한의 이동 횟수를 찾고자 한다. [ Fig. 1 ] 시작노드(좌)와 목표노드(우) [ Fig. 2 ] 처리 과정 제한 사항 - 테스트 케이스 T의 범위, 3 p = Q->p; Q->p = p; t = temp->f; temp->f = Q->f; Q->f = t; temp = Q; Q = Q->next; free(temp); return p; } /* enqueue( int **, int) this is data structure to store the puzzles. */ void enqueue( int **p, int pre, int size) .. 더보기
C언어 BFS 미로 최단경로 구하기(escape the maze in C) BFS 미로 최단경로 - DFS 알고리즘을 이용하여 주어진 미로의 최단 경로를 구하라. 제한 사항 - N X N 미로의 크기 N은 5 ~ 10 - 각 수행 시간은 10msec를 넘지 않도록 한다. 입력과 출력 - 입력은 맨 처음은 테스트 횟수(TC), 그 다음부터 N X N 미로의 크기 N 을 입력받고 미로의 원소들을 각각 입력받는다.( 입력은 첨부된 input.txt 파일을 이용한다. ) input.txt 시작점(1), 목표점(2), 길(0), 벽(7) = 이동할 수 없는 지점 - 출력은 우측의 출력 예를 참고한다. 입력 예 출력 예 5 5 7 1 7 7 7 7 0 0 0 7 7 0 7 0 7 7 7 0 0 7 7 7 7 2 7 ....... #1, ? msec. answer = 6 #2, ? msec.. 더보기
C언어 DFS 미로 최단경로 구하기(escape the maze in C) DFS 미로 최단경로 - DFS 알고리즘을 이용하여 주어진 미로의 최단 경로를 구하라. 제한 사항 - N X N 미로의 크기 N은 5 ~ 10 - 각 수행 시간은 10msec를 넘지 않도록 한다. 입력과 출력 - 입력은 맨 처음은 테스트 횟수(TC), 그 다음부터 N X N 미로의 크기 N 을 입력받고 미로의 원소들을 각각 입력받는다.( 입력은 첨부된 input.txt 파일을 이용한다. ) 시작점(1), 목표점(2), 길(0), 벽(7) = 이동할 수 없는 지점 - 출력은 우측의 출력 예를 참고한다. 입력 예 출력 예 5 5 7 1 7 7 7 7 0 0 0 7 7 0 7 0 7 7 7 0 0 7 7 7 7 2 7 ....... #1, ? msec. answer = 6 #2, ? msec. answer =.. 더보기
20141124_스택(stack)을 이용한 수식의 중위 -> 전위 표기법 변환 이번 소스는 자료구조 스택(stack)을 이용해서 중위 표기법을 전위 표기법으로 전화하는 프로그램 소스입니다. #include #include // 스택 노드를 위한 구조체 선언 typedef struct node{ char data; struct node *pre; }NODE; // 하나의 새로운 노드를 생성해주는 함수 NODE* createNode(char data) { NODE *temp = (NODE*)malloc(sizeof(NODE)); temp->data = data; temp->pre = NULL; return temp; } // 스택에 저장된 데이터를 하나 꺼내는 함수 char pop(NODE **top) { NODE *temp = *top; char t; if(*top == NULL) .. 더보기
20141124_스택(stack)을 이용한 수식의 중위 -> 후위 표기법 변환 자료구조의 종류 중 하나인 스택(stack)을 이용하여 수식을 중위 표기법에서 후위 표기법으로 변환하는 프로그램입니다. #include #include typedef struct node{char data;struct node *pre;}NODE; NODE* createNode(char data){NODE *temp = (NODE*)malloc(sizeof(NODE));temp->data = data;temp->pre = NULL; return temp;} char pop(NODE **top){NODE *temp = *top;char t; if(*top == NULL)return 0; *top = (*top)->pre; t = temp->data; free(temp); return t;} void pus.. 더보기