Notice
Recent Posts
Recent Comments
tony9402
[영상처리 스터디] Queue를 이용해 문제를 풀어보자. 본문
반응형
오늘 풀 문제는 바로 단지번호붙이기이다. 이 문제에 대해 이미 올렸었는데 이 글은 여기와 또 다른 소스코드가 있다. 거기에서도 C로 queue를 구현했지만 너무 못짰다............ 거기는 C로 구현한거 빼고 보는걸 추천한다.
설명은 거기서 했었으니 바로 소스코드만 올리겠다. (간단한 설명을 보고 싶은 사람은 여기에 가서 읽고 오면 된다.)
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 | #include<stdio.h> #include<stdlib.h> struct pos { int y; int x; }; struct queue { struct queue *next; struct pos POS; }; typedef struct queue Queue; typedef struct { Queue* head; Queue* tail; int size; }qq; typedef qq* Q; void init(Q q) { q->head = (Queue*)malloc(sizeof(Queue)); q->head->next = NULL; q->tail = q->head; q->size = 0; return; } void push(Q q, int y, int x) { Queue *New = (Queue*)malloc(sizeof(Queue)); New->next = NULL; q->tail->POS.y = y; q->tail->POS.x = x; q->tail->next = New; q->tail = New; q->size++; } void pop(Q q) { Queue *del = q->head; q->head = q->head->next; free(del); q->size--; } struct pos front(Q q) { return q->head->POS; } int IsEmpty(Q q) { return !q->size; // return q->size == 0; //return q->head == q->tail; } int map[30][30]; int output[1000]; int pointer = 0; int dx[] = { -1,1,0,0 }; int dy[] = { 0,0,-1,1 }; int main() { Q q = (Q)malloc(sizeof(qq)); init(q); int n; scanf("%d", &n); for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) scanf("%1d", &map[i][j]); for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) { if (map[i][j]) { int count = 0; push(q,i,j);//y == i, x == j map[i][j] = 0; while (!IsEmpty(q)) { ++count; struct pos now = front(q); pop(q); for (int k = 0; k < 4; k++) { int qy = now.y + dy[k]; int qx = now.x + dx[k]; if (0 > qy || qy >= n || 0 > qx || qx >= n)continue; if (map[qy][qx]) { map[qy][qx] = 0; push(q, qy,qx); } } } output[pointer++] = count; } } int temp; for (int i = 0; i < pointer - 1; i++) { for (int j = i + 1; j < pointer; j++) { if (output[i] > output[j]) { temp = output[i]; output[i] = output[j]; output[j] = temp; } } } printf("%d\n", pointer); for (int i = 0; i < pointer; i++) printf("%d\n", output[i]); return 0; } | cs |
반응형
'알고리즘 > 공부' 카테고리의 다른 글
[SCCC 스터디] 4일차 기초 자료구조 (0) | 2019.01.15 |
---|---|
[영상처리 스터디] STL queue를 사용해보자. (0) | 2019.01.15 |
[영상처리 스터디] Queue 구현을 조금 개선시키기 (0) | 2019.01.14 |
[영상처리 스터디] Queue C로 구현하기 (2) | 2019.01.14 |
[SCCC 스터디] 선택, 퀵, 머지, 카운팅 소트 (0) | 2019.01.14 |
Comments