ผลต่างระหว่างรุ่นของ "418531 ภาคต้น 2552/โจทย์ปัญหาอัลกอริทึมเกี่ยวกับกราฟ/เฉลยข้อ 8"
ไปยังการนำทาง
ไปยังการค้นหา
Cardcaptor (คุย | มีส่วนร่วม) (หน้าที่ถูกสร้างด้วย 'สมมติว่า <math>u \,</math> เป็น vertex และให้ <math>v_1, v_2, \ldots, v_k \,</math> เป็นลู…') |
Cardcaptor (คุย | มีส่วนร่วม) |
||
แถว 1: | แถว 1: | ||
สมมติว่า <math>u \,</math> เป็น vertex และให้ <math>v_1, v_2, \ldots, v_k \,</math> เป็นลูกของ <math>u \,</math> เราจะได้ว่า | สมมติว่า <math>u \,</math> เป็น vertex และให้ <math>v_1, v_2, \ldots, v_k \,</math> เป็นลูกของ <math>u \,</math> เราจะได้ว่า | ||
− | : <math>z[u] = \ | + | : <math>z[u] = \max(z[v_1], z[v_2], z[v_3], \ldots, z[v_k], x[u]) \,</math> |
− | ฉะนั้นเราสามารถหาค่า <math>z[u] \,</math> สำหรับทุก vertex <math>u \,</math> โดยการปรับปรุง <math>\mathrm{DFS} \,</math> | + | ฉะนั้นเราสามารถหาค่า <math>z[u] \,</math> สำหรับทุก vertex <math>u \,</math> โดยการปรับปรุง <math>\mathrm{DFS} \,</math> ใหม่ เพื่อให้หลังจาก <math>\mathrm{DFS}(u) \,</math> ทำงานเสร็จแล้ว <math>z[u] \,</math> จะมีค่าถูกต้อง ดังต่อไปนี้ |
<geshi lang="c"> | <geshi lang="c"> | ||
แถว 14: | แถว 14: | ||
if explored[v] = 0 then | if explored[v] = 0 then | ||
DFS(v) | DFS(v) | ||
− | if z[v] | + | if z[v] > z[u] then |
z[u] = z[v] | z[u] = z[v] | ||
} | } | ||
} | } | ||
</geshi> | </geshi> |
รุ่นแก้ไขเมื่อ 14:00, 16 กันยายน 2552
สมมติว่า เป็น vertex และให้ เป็นลูกของ เราจะได้ว่า
ฉะนั้นเราสามารถหาค่า สำหรับทุก vertex โดยการปรับปรุง ใหม่ เพื่อให้หลังจาก ทำงานเสร็จแล้ว จะมีค่าถูกต้อง ดังต่อไปนี้
<geshi lang="c"> DFS(u) {
explored[u] = 1 z[u] = x[u] for i = 1 to d[u] do { v = a[u][i] if explored[v] = 0 then DFS(v) if z[v] > z[u] then z[u] = z[v] }
} </geshi>