Slide 1

Slide 1 text

Pembahasan Training Gate TLX Chapter 13 ‐ Rekursi Lanjut © Mamat Rahmat http://olimpiadeinformatika.com

Slide 2

Slide 2 text

https://training.ia‐ toki.org/training/curriculums/1/courses/1/chapters/18/problems

Slide 3

Slide 3 text

Menggambar Pegunungan Menggambang Pegunungan setinggi N = Menggambang Pegunungan setinggi N‐1 Menulis N buah * Menggambang Pegunungan setinggi N‐1 gunung(N) { gunung(N‐1) for i = 1 to N print '*' print endline gunung(N‐1) }

Slide 4

Slide 4 text

Permutasi Zig‐Zag Buat semua permutasi bilangan 1‐N, cek apakah berbentuk zigzag zigzag() { for i = 2 to N‐1 do if not (((bil[i]>bil[i+1]) and (bil[i]>bil[i‐1])) or ((bil[i]

Slide 5

Slide 5 text

Brankas Terkunci Untuk membuat kombinasi K dari N bilangan, mulai for dari setelah bilangan yang dipilih sebelumnya rec(idx) { if (idx = K+1) print bil[1]..bil[K] else for i = bil[idx‐1]+1 to N bil[idx] = i rec(idx+1) }

Slide 6

Slide 6 text

Quadtree I: Pengodean Saat kita melakukan pengodean, kita mulai dari persegi awal. Mula‐mula cek apakah persegi itu homogen? Jika homogen 0, abaikan Jika homogen 1, simpan kode Jika tidak homogen, lanjutkan pengodean untuk subpersegi kiri‐atas, kanan‐atas, kiri‐bawah, kanan‐bawah State yang dibutuhkan adalah batas atas, batas bawah, batas kiri, batas kanan dan kodenya

Slide 7

Slide 7 text

rec(at, ba, ki, ka, kode) { if persegi[at..ba][ki..ka] homogen 0 // no action else if persegi[at..ba][ki..ka] homogen 1 simpan kode, misal ke vector else { rec(at, (at+ba)/2, ki, (ki+ka)/2, kode+"0") // kiri atas rec(...) // kanan atas rec(...) // kiri bawah rec(...) // kanan bawah } } P = 1 while (P < R || P < C) P *= 2 rec(1,P,1,P)

Slide 8

Slide 8 text

Quadtree II: Penerjemahan Untuk setiap kode, karakter kedua hingga terakhir menunjukkan langkah menelusuri sub‐persegi ke dalam Setelah ditelusuri hingga ke dalam, warnai sub‐persegi ini dengan 1 for i := 1 to N at = 1 ba = P ki = 1 ka = P for j := 2 to length(S[i]) if (s[i][j] = '0') ba = (at+ba)/2 ka = (ki+ka)/2 else // dst untuk '1','2','3' for x = at to ba for y = ki to ka persegi[x][y] = '1'

Slide 9

Slide 9 text

Jawbreaker I: Klik! Pada soal ini kita diminta untuk menelusuri grid mulai dari suatu titik menyebar ke kiri,kanan,atas,bawah yang bilangannya sama ﴾gunakan rekursi﴿ Algoritma ini disebut floodfill Kita harus menandai titik mana saja yang sudah dikunjungi agar tidak dikunjungi lagi ﴾infinite recursion﴿ rec(a, b) { if (a>=1 and a<=n and b>=1 and b<=m) if (not visited[a][b] and grid[a][b]=grid[x][y]) visited[a][b] = true; tot++; rec(a+1,b); rec(a‐1,b); rec(a,b+1); rec(a,b‐1); } rec(x, y)