diff options
| author | Richard Qin <richard.qin.001@gmail.com> | 2026-09-15 08:16:43 +0800 |
|---|---|---|
| committer | Richard Qin <richard.qin.001@gmail.com> | 2026-09-15 08:16:43 +0800 |
| commit | 4022e5c95210631e4aceb08eaf9d9071aa5aefc4 (patch) | |
| tree | a5922559836e45fb3459a3d070367912e1035b1a /tests/sysy_lvX/064_percolation.sy | |
| download | rcc-master.tar.gz rcc-master.tar.xz | |
Diffstat (limited to 'tests/sysy_lvX/064_percolation.sy')
| -rw-r--r-- | tests/sysy_lvX/064_percolation.sy | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/tests/sysy_lvX/064_percolation.sy b/tests/sysy_lvX/064_percolation.sy new file mode 100644 index 0000000..a4fdae8 --- /dev/null +++ b/tests/sysy_lvX/064_percolation.sy @@ -0,0 +1,82 @@ +int array[110]; +int n; +void init(int n) { + int i = 1; + while (i <= n * n + 1) { + array[i] = -1; + i = i + 1; + } +} + +int findfa(int a) { + if (array[a] == a) + return a; + else { + array[a] = findfa(array[a]); + return array[a]; + } +} +void mmerge(int a, int b) { + int m = findfa(a); + int n = findfa(b); + if (m != n) array[m] = n; +} +int main() { + int t, m; + int a, b; + t = 1; + while (t) { + t = t - 1; + n = 4; + m = 10; + int i = 0; + int flag = 0; + init(n); + int k = n * n + 1; + + while (i < m) { + a = getint(); + b = getint(); + + if (!flag) { + int loc = n * (a - 1) + b; + + array[loc] = loc; + if (a == 1) { + array[0] = 0; + mmerge(loc, 0); + } + if (a == n) { + array[k] = k; + mmerge(loc, k); + } + if (b < n && array[loc + 1] != -1) { + mmerge(loc, loc + 1); + } + if (b > 1 && array[loc - 1] != -1) { + mmerge(loc, loc - 1); + } + if (a < n && array[loc + n] != -1) { + mmerge(loc, loc + n); + } + if (a > 1 && array[loc - n] != -1) { + mmerge(loc, loc - n); + } + + if (array[0] != -1 && array[k] != -1 && findfa(0) == findfa(k)) { + flag = 1; + int tmp = i + 1; + putint(tmp); + putch(10); + } + } + + i = i + 1; + } + if (!flag) { + putint(-1); + putch(10); + } + } + return 0; +} |
