Notice
Recent Posts
Recent Comments
Link
Typing diary
Stack을 이용한 미로찾기 본문
2018.5.12
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 | #include<stdio.h> #include <stdlib.h> typedef struct StackNode { struct StackNode* link; int x, y; }StackNode; typedef struct Stack { StackNode* top; }Stack; Stack* CreatStack() { Stack* s = (Stack*)malloc(sizeof(Stack)); s->top = NULL; } void Delete(Stack* s) { while (s->top != NULL) { printf("(%d,%d) ", s->top->y, s->top->x); StackNode* temp = s->top; s->top = s->top->link; free(temp); } } void PrintMaze(int maze[7][7],int startX,int startY,int endX,int endY) { for (int i = 0; i < 7; i++) { for (int j = 0; j < 7; j++) { if (i == startX && j == startY) printf("⊙"); else if (i == 1 && j == 1) printf("★"); else if (maze[i][j] == 2) printf("▒"); else if (maze[i][j] == 0) printf(" "); } printf("\n"); } } StackNode* Find(int maze[7][7],Stack* s, int startX, int startY, int endX, int endY) { StackNode* node = (StackNode*)malloc(sizeof(StackNode)); node->x = startX; node->y = startY; node->link = NULL; if (startX == endX && startY == endY) return node; else if (maze[startY - 1][startX] == 2 && maze[startY + 1][startX] == 2 && maze[startY][startX - 1] == 2 && maze[startY][startX + 1] == 2) return NULL; maze[startY][startX] = 2; if (maze[startY][startX + 1] == 0) { StackNode* temp = Find(maze, s, startX + 1, startY, endX, endY); if (temp != NULL) { temp->link = s->top; s->top = temp; return node; } } if (maze[startY][startX - 1] == 0) { StackNode* temp = Find(maze, s, startX - 1, startY, endX, endY); if (temp != NULL) { temp->link = s->top; s->top = temp; return node; } } if (maze[startY + 1][startX] == 0) { StackNode* temp = Find(maze, s, startX, startY + 1, endX, endY); if (temp != NULL) { temp->link = s->top; s->top = temp; return node; } } if (maze[startY - 1][startX] == 0) { StackNode* temp = Find(maze, s, startX, startY - 1, endX, endY); if (temp != NULL) { temp->link = s->top; s->top = temp; return node; } } } void Func(int maze[7][7], Stack* s, int startX, int startY, int endX, int endY) { if (maze[startY][startX] == 2 || maze[endY][endX] == 2) { printf("출발지점 또는 도착지점이 잘못된 값입니다.\n"); return; } StackNode* node = Find(maze, s, startX, startY, endX, endY); node->link = s->top; s->top = node; } void main(void) { int maze[7][7] = { { 2,2,2,2,2,2,2 }, { 2,0,0,0,0,0,2 }, { 2,0,2,0,2,0,2 }, { 2,0,0,2,0,2,2 }, { 2,2,0,2,0,2,2 }, { 2,0,0,0,0,0,2 }, { 2,2,2,2,2,2,2 }, }; PrintMaze(maze, 5, 5, 1, 1); Stack* stack = CreatStack(); Func(maze, stack, 5, 5, 1, 1); Delete(stack); getch(); return 0; } | cs |
'자료구조' 카테고리의 다른 글
링크드리스트 연습(C++) (0) | 2022.08.21 |
---|