Study
2009. 5. 9. 19:57
disjoint의 성질을 이용해서 UNION을 사용한 미로 만들기
#include
#include
int * parent; int * rank; void MAKE_SET(int p); int FIND(int find); void UNION(int x, int y); int main(void) { int p, q, count = 0; int i, j, qsetname, psetname; int gaid = 1, seid = 1; int t = 20, t2 = 10; int ground, n; printf("input number n <= 50"); printf("\n"); scanf("%d", & amp; n); ground = n * n; /** lg1 = new Line(10, 10, $n*10+10, 10); **/ /** lg2 = new Line(10, $n*10+10, $n*10+10, $n*10+10); **/ /** ls2 = new Line($n*10+10, 10, $n*10+10, $n*10+10); **/ while (gaid & lt; ground) { for (i = 1; i & lt; = n; i++) { /** ga$gaid = new Line($i*10, $t,($i+1)*10, $t); **/ gaid++; } t += 10; } while (seid & lt; ground) { for (i = 1; i & lt; = n; i++) { /** se$seid = new Line($i*10,$t2, $i*10, $t2+10); **/ seid++; } t2 += 10; } parent = (int * ) malloc(sizeof(int) * (ground + 1)); rank = (int * ) malloc(sizeof(int) * (ground + 1)); if (parent && rank == NULL) exit(1); MAKE_SET(ground); while (count & lt; ground - 1) { p = (rand() % ground) + 1; q = (rand() % 4); if (q == 0) q = p - 1; else if (q == 1) q = p + 1; else if (q == 2) q = p - n; else q = p + n; if (q % n == 0 && p % n == 1) continue; if (p % n == 0 && q % n == 1) continue; if (q & gt; 0 && q & lt; ground) { if ((psetname = FIND(p)) != (qsetname = FIND(q))) { if (q == p - n || q == p + n) { if (p & lt; q) { /**remove(ga$p); **/ } else { /**remove(ga$q); **/ } } else if (q == p + 1 || q == p - 1) { if (p & lt; q) { /**remove(se$q); **/ } else { /**remove(se$p); **/ } } count++; UNION(psetname, qsetname); } } } free(parent); free(rank); } void MAKE_SET(int p) { int make; for (make = 1; make & lt; = p; make++) { parent[make] = make; rank[make] = 0; } printf("\n"); } int FIND(int find) { if (find != parent[find]) parent[find] = FIND(parent[find]); return parent[find]; } void UNION(int x, int y) { int u, v; u = FIND(x); v = FIND(y); if (rank[u] & gt; rank[v]) parent[v] = u; else { parent[u] = v; if (rank[u] == rank[v]) rank[v]++; } }
중간중간주석으로표기되어있는부분은CAS와연동되는부분,
주석의자비란없습니다, -_ - ;
공유하기
게시글 관리
솔직한 목소리
blog
profile
tag cloud
travel log
guest book
by
bslime
전체보기
(52)
목소리
(1)
영화
(0)
음악
(0)
Study
(34)
Security
(12)
Web
(2)
WLAN
(7)
Network
(1)
System
(1)
Wargame
(5)
Web
(0)
Reverse Engineering
(3)
Crypto
(2)
티스토리
미로
삽질
Algorithm
CTF
padocon
초대장
폐인
Maze
잘했어요
«
2025/01
»
일
월
화
수
목
금
토
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
darktoil.
인생여전龍군.
슝이.
MR-J@.
미움.
vvipbeom.
Copyright ⓒ 2010.
bslime
, Skin designed by
Creasmworks.
All rights reserved.
티스토리툴바