āđ‚āļ„āđ‰āļ”āļĒāļīāļĄ/āļˆāļēāļ§āļēāļšāļĨāđ‡āļ­āļ/āļŠāļļāđˆāļĄ/āļ„āļģāļ–āļēāļĄ & āļ„āļģāļ•āļ­āļšāļˆāļēāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™: āļ­āļąāļĨāļāļ­āļĢāļīāļ˜āļķāļĄāđƒāļ™ Java āļ•āļ­āļ™āļ—āļĩāđˆ ...
John Squirrels
āļĢāļ°āļ”āļąāļš
San Francisco

āļ„āļģāļ–āļēāļĄ & āļ„āļģāļ•āļ­āļšāļˆāļēāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™: āļ­āļąāļĨāļāļ­āļĢāļīāļ˜āļķāļĄāđƒāļ™ Java āļ•āļ­āļ™āļ—āļĩāđˆ 2

āđ€āļœāļĒāđāļžāļĢāđˆāđƒāļ™āļāļĨāļļāđˆāļĄ
āļ™āļĩāđˆāđ€āļ›āđ‡āļ™āļŠāđˆāļ§āļ™āļ—āļĩāđˆāļŠāļ­āļ‡āļ‚āļ­āļ‡āļ āļēāļžāļĢāļ§āļĄāđ‚āļ”āļĒāļĒāđˆāļ­āļ‚āļ­āļ‡āļ­āļąāļĨāļāļ­āļĢāļīāļ—āļķāļĄ āļ™āļĩāđˆāļ„āļ·āļ­āļĨāļīāļ‡āļ„āđŒāđ„āļ›āļĒāļąāļ‡āļšāļ—āļ„āļ§āļēāļĄāđāļĢāļ āļāđˆāļ­āļ™āļŦāļ™āđ‰āļēāļ™āļĩāđ‰āđ€āļĢāļēāđ„āļ”āđ‰āļ”āļđāļ­āļąāļĨāļāļ­āļĢāļīāļ˜āļķāļĄāļ•āđˆāļēāļ‡āđ† āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāđ€āļĢāļĩāļĒāļ‡āļĨāļģāļ”āļąāļšāļ­āļēāļĢāđŒāđ€āļĢāļĒāđŒ āđ€āļŠāđˆāļ™āđ€āļ”āļĩāļĒāļ§āļāļąāļšāļŠāļīāđˆāļ‡āļ—āļĩāđˆāđ€āļĢāļĩāļĒāļāļ§āđˆāļēāļ­āļąāļĨāļāļ­āļĢāļīāļ˜āļķāļĄāđ‚āļĨāļ  āļ„āļģāļ–āļēāļĄ & āļ„āļģāļ•āļ­āļšāļˆāļēāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™: āļ­āļąāļĨāļāļ­āļĢāļīāļ˜āļķāļĄāđƒāļ™ Java āļ•āļ­āļ™āļ—āļĩāđˆ 2 - 1āļ§āļąāļ™āļ™āļĩāđ‰āđ€āļĢāļēāļˆāļ°āļžāļđāļ”āļ–āļķāļ‡āļāļĢāļēāļŸāđāļĨāļ°āļ­āļąāļĨāļāļ­āļĢāļīāļ˜āļķāļĄāļ—āļĩāđˆāđ€āļāļĩāđˆāļĒāļ§āļ‚āđ‰āļ­āļ‡āļāļąāļ™ āļāļĢāļēāļŸāđ€āļ›āđ‡āļ™āļŦāļ™āļķāđˆāļ‡āđƒāļ™āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļ—āļĩāđˆāļĒāļ·āļ”āļŦāļĒāļļāđˆāļ™āđāļĨāļ°āļŦāļĨāļēāļāļŦāļĨāļēāļĒāļ—āļĩāđˆāļŠāļļāļ”āđƒāļ™āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ āđ‚āļ”āļĒāļ›āļāļ•āļīāļāļĢāļēāļŸ G āļ–āļđāļāļāļģāļŦāļ™āļ”āđ‚āļ”āļĒāđ€āļ‹āļ•āļ„āļđāđˆāļŦāļ™āļķāđˆāļ‡ āđ€āļŠāđˆāļ™ G = (V, R) āđ‚āļ”āļĒāļ—āļĩāđˆ:
  • V āļ„āļ·āļ­āđ€āļ‹āļ•āļ‚āļ­āļ‡āļˆāļļāļ”āļĒāļ­āļ”
  • R āļ„āļ·āļ­āļŠāļļāļ”āļ‚āļ­āļ‡āđ€āļŠāđ‰āļ™āļ—āļĩāđˆāđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļ„āļđāđˆāļ‚āļ­āļ‡āļˆāļļāļ”āļĒāļ­āļ”
āđ€āļŠāđ‰āļ™āđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļ—āļĩāđˆāđ„āļĄāđˆāđ„āļ”āđ‰āļšāļ­āļāļ—āļīāļĻāļ—āļēāļ‡āđ€āļĢāļĩāļĒāļāļ§āđˆāļēāļ‚āļ­āļš: āļ„āļģāļ–āļēāļĄ & āļ„āļģāļ•āļ­āļšāļˆāļēāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™: āļ­āļąāļĨāļāļ­āļĢāļīāļ˜āļķāļĄāđƒāļ™ Java āļ•āļ­āļ™āļ—āļĩāđˆ 2 - 2āđ€āļŠāđ‰āļ™āļšāļ­āļāļ—āļīāļĻāļ—āļēāļ‡āđ€āļĢāļĩāļĒāļāļ§āđˆāļēāļŠāđˆāļ§āļ™āđ‚āļ„āđ‰āļ‡āļ„āļģāļ–āļēāļĄ & āļ„āļģāļ•āļ­āļšāļˆāļēāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™: āļ­āļąāļĨāļāļ­āļĢāļīāļ˜āļķāļĄāđƒāļ™ Java āļ•āļ­āļ™āļ—āļĩāđˆ 2 - 3āđ‚āļ”āļĒāļ—āļąāđˆāļ§āđ„āļ›āđāļĨāđ‰āļ§ āļāļĢāļēāļŸāļˆāļ°āđāļŠāļ”āļ‡āļ”āđ‰āļ§āļĒāđāļœāļ™āļ āļēāļžāļ‹āļķāđˆāļ‡āļˆāļļāļ”āļĒāļ­āļ”āļšāļēāļ‡āļˆāļļāļ”āđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļāļąāļ™āļ”āđ‰āļ§āļĒāļ‚āļ­āļš (āļŠāđˆāļ§āļ™āđ‚āļ„āđ‰āļ‡) āļāļĢāļēāļŸāļ—āļĩāđˆāļĄāļĩāļ‚āļ­āļšāđāļŠāļ”āļ‡āļ—āļīāļĻāļ—āļēāļ‡āļāļēāļĢāđ€āļ„āļĨāļ·āđˆāļ­āļ™āļ—āļĩāđˆāđ€āļĢāļĩāļĒāļāļ§āđˆāļēāļāļĢāļēāļŸāļāļģāļāļąāļš āļŦāļēāļāļāļĢāļēāļŸāđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļāļąāļ™āļ”āđ‰āļ§āļĒāļ‚āļ­āļšāļ—āļĩāđˆāđ„āļĄāđˆāđ„āļ”āđ‰āļĢāļ°āļšāļļāļ—āļīāļĻāļ—āļēāļ‡āļāļēāļĢāđ€āļ„āļĨāļ·āđˆāļ­āļ™āļ—āļĩāđˆ āđ€āļĢāļēāļˆāļ°āļšāļ­āļāļ§āđˆāļēāļāļĢāļēāļŸāļ™āļąāđ‰āļ™āđ€āļ›āđ‡āļ™āļāļĢāļēāļŸāļ—āļĩāđˆāđ„āļĄāđˆāļĄāļĩāļ—āļīāļĻāļ—āļēāļ‡ āļ‹āļķāđˆāļ‡āļŦāļĄāļēāļĒāļ„āļ§āļēāļĄāļ§āđˆāļēāļāļēāļĢāđ€āļ„āļĨāļ·āđˆāļ­āļ™āļ—āļĩāđˆāđ€āļ›āđ‡āļ™āđ„āļ›āđ„āļ”āđ‰āđƒāļ™āļ—āļąāđ‰āļ‡āļŠāļ­āļ‡āļ—āļīāļĻāļ—āļēāļ‡: āļ—āļąāđ‰āļ‡āļˆāļēāļāļˆāļļāļ”āļĒāļ­āļ” A āđ„āļ›āļĒāļąāļ‡āļˆāļļāļ”āļĒāļ­āļ” B āđāļĨāļ°āļˆāļēāļāļˆāļļāļ”āļĒāļ­āļ” B āđ„āļ›āļĒāļąāļ‡āļˆāļļāļ”āļĒāļ­āļ” A āļāļĢāļēāļŸāļ—āļĩāđˆāđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļāļąāļ™āļ„āļ·āļ­āļāļĢāļēāļŸāļ‹āļķāđˆāļ‡āļĄāļĩāđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļ­āļĒāđˆāļēāļ‡āļ™āđ‰āļ­āļĒāļŦāļ™āļķāđˆāļ‡āđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļ—āļĩāđˆāļ™āļģāļˆāļēāļāđāļ•āđˆāļĨāļ°āļˆāļļāļ”āļĒāļ­āļ”āđ„āļ›āļĒāļąāļ‡āļˆāļļāļ”āļĒāļ­āļ”āļ­āļ·āđˆāļ™ āđ† (āļ”āļąāļ‡āđ€āļŠāđˆāļ™āđƒāļ™ āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļ‚āđ‰āļēāļ‡āļ•āđ‰āļ™) āļŦāļēāļāđ„āļĄāđˆāđ€āļ›āđ‡āļ™āđ€āļŠāđˆāļ™āļ™āļąāđ‰āļ™ āļāļĢāļēāļŸāļˆāļ°āļ‚āļēāļ”āļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­: āļ„āļģāļ–āļēāļĄ & āļ„āļģāļ•āļ­āļšāļˆāļēāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™: āļ­āļąāļĨāļāļ­āļĢāļīāļ˜āļķāļĄāđƒāļ™ Java āļ•āļ­āļ™āļ—āļĩāđˆ 2 - 4āļŠāļēāļĄāļēāļĢāļ–āļāļģāļŦāļ™āļ”āļ™āđ‰āļģāļŦāļ™āļąāļāđƒāļŦāđ‰āļāļąāļšāļ‚āļ­āļš (āļŠāđˆāļ§āļ™āđ‚āļ„āđ‰āļ‡) āđ„āļ”āđ‰ āļ™āđ‰āļģāļŦāļ™āļąāļāļ„āļ·āļ­āļ•āļąāļ§āđ€āļĨāļ‚āļ—āļĩāđˆāđāļŠāļ”āļ‡āļ–āļķāļ‡āļĢāļ°āļĒāļ°āļŦāđˆāļēāļ‡āļ—āļēāļ‡āļāļēāļĒāļ āļēāļžāļĢāļ°āļŦāļ§āđˆāļēāļ‡āļˆāļļāļ”āļĒāļ­āļ”āļŠāļ­āļ‡āļˆāļļāļ” (āļŦāļĢāļ·āļ­āđ€āļ§āļĨāļēāļāļēāļĢāđ€āļ”āļīāļ™āļ—āļēāļ‡āļŠāļąāļĄāļžāļąāļ—āļ˜āđŒāļĢāļ°āļŦāļ§āđˆāļēāļ‡āļˆāļļāļ”āļĒāļ­āļ”āļŠāļ­āļ‡āļˆāļļāļ”) āļāļĢāļēāļŸāđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰āđ€āļĢāļĩāļĒāļāļ§āđˆāļēāļāļĢāļēāļŸāļ–āđˆāļ§āļ‡āļ™āđ‰āļģāļŦāļ™āļąāļ:āļ„āļģāļ–āļēāļĄ & āļ„āļģāļ•āļ­āļšāļˆāļēāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™: āļ­āļąāļĨāļāļ­āļĢāļīāļ˜āļķāļĄāđƒāļ™ Java āļ•āļ­āļ™āļ—āļĩāđˆ 2 - 5

3. āļ­āļąāļĨāļāļ­āļĢāļīāļ˜āļķāļĄāļāļēāļĢāļ„āđ‰āļ™āļŦāļēāđ€āļŠāđ‰āļ™āļ—āļēāļ‡ (āđ€āļ™āđ‰āļ™āđ€āļŠāļīāļ‡āļĨāļķāļ āđ€āļ™āđ‰āļ™āļāļ§āđ‰āļēāļ‡āļāđˆāļ­āļ™)

āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāļžāļ·āđ‰āļ™āļāļēāļ™āļ›āļĢāļ°āļāļēāļĢāļŦāļ™āļķāđˆāļ‡āļ—āļĩāđˆāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāļāļąāļšāļāļĢāļēāļŸāļ„āļ·āļ­āļāļēāļĢāļāļģāļŦāļ™āļ”āļˆāļļāļ”āļĒāļ­āļ”āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļ—āļĩāđˆāļŠāļēāļĄāļēāļĢāļ–āđ€āļ‚āđ‰āļēāļ–āļķāļ‡āđ„āļ”āđ‰āļˆāļēāļāļˆāļļāļ”āļĒāļ­āļ”āļ—āļĩāđˆāļāļģāļŦāļ™āļ” āļĨāļ­āļ‡āļ™āļķāļāļ āļēāļžāļ§āđˆāļēāļ„āļļāļ“āļāļģāļĨāļąāļ‡āļžāļĒāļēāļĒāļēāļĄāļžāļīāļˆāļēāļĢāļ“āļēāļ§āđˆāļēāļˆāļ°āļ™āļąāđˆāļ‡āļĢāļ–āļšāļąāļŠāļˆāļēāļāđ€āļĄāļ·āļ­āļ‡āļŦāļ™āļķāđˆāļ‡āđ„āļ›āļĒāļąāļ‡āļ­āļĩāļāđ€āļĄāļ·āļ­āļ‡āļŦāļ™āļķāđˆāļ‡āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ„āļĢ āļĢāļ§āļĄāļ–āļķāļ‡āļāļēāļĢāđ€āļ”āļīāļ™āļ—āļēāļ‡āļ—āļĩāđˆāđ€āļ›āđ‡āļ™āđ„āļ›āđ„āļ”āđ‰āļ”āđ‰āļ§āļĒ āļšāļēāļ‡āđ€āļĄāļ·āļ­āļ‡āļŠāļēāļĄāļēāļĢāļ–āđ€āļ‚āđ‰āļēāļ–āļķāļ‡āđ„āļ”āđ‰āđ‚āļ”āļĒāļ•āļĢāļ‡ āđƒāļ™āļ‚āļ“āļ°āļ—āļĩāđˆāļšāļēāļ‡āđ€āļĄāļ·āļ­āļ‡āļŠāļēāļĄāļēāļĢāļ–āđ€āļ‚āđ‰āļēāļ–āļķāļ‡āđ„āļ”āđ‰āđ‚āļ”āļĒāļœāđˆāļēāļ™āđ€āļĄāļ·āļ­āļ‡āļ­āļ·āđˆāļ™āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™ āļĄāļĩāļŠāļ–āļēāļ™āļāļēāļĢāļ“āđŒāļ­āļ·āđˆāļ™āđ† āļĄāļēāļāļĄāļēāļĒāļ—āļĩāđˆāļ„āļļāļ“āļ­āļēāļˆāļ•āđ‰āļ­āļ‡āļ„āđ‰āļ™āļŦāļēāļˆāļļāļ”āļĒāļ­āļ”āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļ—āļĩāđˆāļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āđ€āļ‚āđ‰āļēāļ–āļķāļ‡āđ„āļ”āđ‰āļˆāļēāļāļˆāļļāļ”āļĒāļ­āļ”āļ—āļĩāđˆāļāļģāļŦāļ™āļ” āļĄāļĩāļŠāļ­āļ‡āļ§āļīāļ˜āļĩāļŦāļĨāļąāļāđƒāļ™āļāļēāļĢāļŠāļģāļĢāļ§āļˆāļāļĢāļēāļŸ: āđ€āļŠāļīāļ‡āļĨāļķāļāļĄāļēāļāđˆāļ­āļ™āđāļĨāļ°āļāļ§āđ‰āļēāļ‡āļāđˆāļ­āļ™ āđ€āļĢāļēāļˆāļ°āļŠāļģāļĢāļ§āļˆāļ—āļąāđ‰āļ‡āļŠāļ­āļ‡āļŠāļīāđˆāļ‡āļ™āļĩāđ‰ āļ—āļąāđ‰āļ‡āļŠāļ­āļ‡āļ§āļīāļ˜āļĩāļˆāļ°āļŠāļģāļĢāļ§āļˆāļˆāļļāļ”āļĒāļ­āļ”āļ—āļĩāđˆāđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļāļąāļ™āļ—āļąāđ‰āļ‡āļŦāļĄāļ” āļŦāļēāļāļ•āđ‰āļ­āļ‡āļāļēāļĢāļŠāļģāļĢāļ§āļˆāļ­āļąāļĨāļāļ­āļĢāļīāļ˜āļķāļĄāļ—āļĩāđˆāđ€āļ™āđ‰āļ™āđ€āļŠāļīāļ‡āļĨāļķāļāđāļĨāļ°āļāļ§āđ‰āļēāļ‡āļāđˆāļ­āļ™āđ€āļžāļīāđˆāļĄāđ€āļ•āļīāļĄ āđ€āļĢāļēāļˆāļ°āđƒāļŠāđ‰āļāļĢāļēāļŸāļ•āđˆāļ­āđ„āļ›āļ™āļĩāđ‰:āļ„āļģāļ–āļēāļĄ & āļ„āļģāļ•āļ­āļšāļˆāļēāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™: āļ­āļąāļĨāļāļ­āļĢāļīāļ˜āļķāļĄāđƒāļ™ Java āļ•āļ­āļ™āļ—āļĩāđˆ 2 - 6

āļāļēāļĢāļ„āđ‰āļ™āļŦāļēāđ€āļŠāļīāļ‡āļĨāļķāļāļāđˆāļ­āļ™

āļ™āļĩāđˆāđ€āļ›āđ‡āļ™āļŦāļ™āļķāđˆāļ‡āđƒāļ™āļ§āļīāļ˜āļĩāļāļēāļĢāļ‚āđ‰āļēāļĄāļāļĢāļēāļŸāļ—āļĩāđˆāđƒāļŠāđ‰āļāļąāļ™āļ—āļąāđˆāļ§āđ„āļ› āļāļĨāļĒāļļāļ—āļ˜āđŒāļ—āļĩāđˆāđ€āļ™āđ‰āļ™āļ„āļ§āļēāļĄāļĨāļķāļāđ€āļ›āđ‡āļ™āļ­āļąāļ™āļ”āļąāļšāđāļĢāļāļ„āļ·āļ­āļāļēāļĢāđ€āļˆāļēāļ°āļāļĢāļēāļŸāđƒāļŦāđ‰āļĨāļķāļāļ—āļĩāđˆāļŠāļļāļ”āđ€āļ—āđˆāļēāļ—āļĩāđˆāļˆāļ°āđ€āļ›āđ‡āļ™āđ„āļ›āđ„āļ”āđ‰ āļˆāļēāļāļ™āļąāđ‰āļ™āļŦāļĨāļąāļ‡āļˆāļēāļāļ–āļķāļ‡āļ—āļēāļ‡āļ•āļąāļ™āđāļĨāđ‰āļ§ āđ€āļĢāļēāļˆāļ°āļāļĨāļąāļšāđ„āļ›āļĒāļąāļ‡āļˆāļļāļ”āļĒāļ­āļ”āļ—āļĩāđˆāđƒāļāļĨāđ‰āļ—āļĩāđˆāļŠāļļāļ”āļ‹āļķāđˆāļ‡āļāđˆāļ­āļ™āļŦāļ™āđ‰āļēāļ™āļĩāđ‰āđ„āļĄāđˆāļĄāļĩāļˆāļļāļ”āļĒāļ­āļ”āļ—āļĩāđˆāļ­āļĒāļđāđˆāļ•āļīāļ”āļāļąāļ™ āļ­āļąāļĨāļāļ­āļĢāļīāļ—āļķāļĄāļ™āļĩāđ‰āļˆāļąāļ”āđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨāļšāļ™āļŠāđāļ•āđ‡āļāđ€āļāļĩāđˆāļĒāļ§āļāļąāļšāļ•āļģāđāļŦāļ™āđˆāļ‡āļ—āļĩāđˆāļˆāļ°āļŠāđˆāļ‡āļ„āļ·āļ™āđ€āļĄāļ·āđˆāļ­āļ–āļķāļ‡āļˆāļļāļ”āļŠāļīāđ‰āļ™āļŠāļļāļ” āļāļŽāļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ„āđ‰āļ™āļŦāļēāđ€āļŠāļīāļ‡āļĨāļķāļāļāđˆāļ­āļ™:
  1. āđ€āļĒāļĩāđˆāļĒāļĄāļŠāļĄāļˆāļļāļ”āļĒāļ­āļ”āļ—āļĩāđˆāļ­āļĒāļđāđˆāļ•āļīāļ”āļāļąāļ™āļ‹āļķāđˆāļ‡āđ„āļĄāđˆāđ„āļ”āđ‰āđ€āļĒāļĩāđˆāļĒāļĄāļŠāļĄāļāđˆāļ­āļ™āļŦāļ™āđ‰āļēāļ™āļĩāđ‰ āļ—āļģāđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļŦāļĄāļēāļĒāļ§āđˆāļēāđ€āļĒāļĩāđˆāļĒāļĄāļŠāļĄāđāļĨāđ‰āļ§ āđāļĨāļ°āļ§āļēāļ‡āļĨāļ‡āļšāļ™āļŠāđāļ•āđ‡āļ
  2. āļĒāđ‰āļēāļĒāđ„āļ›āļ—āļĩāđˆāļˆāļļāļ”āļĒāļ­āļ”āļ™āļĩāđ‰
  3. āļ—āļģāļ‹āđ‰āļģāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ—āļĩāđˆ 1
  4. āļŦāļēāļāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ—āļĩāđˆ 1 āđ€āļ›āđ‡āļ™āđ„āļ›āđ„āļĄāđˆāđ„āļ”āđ‰ āđƒāļŦāđ‰āļāļĨāļąāļšāđ„āļ›āļ—āļĩāđˆāļˆāļļāļ”āļĒāļ­āļ”āļāđˆāļ­āļ™āļŦāļ™āđ‰āļēāđāļĨāđ‰āļ§āļĨāļ­āļ‡āļ—āļģāļ•āļēāļĄāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ—āļĩāđˆ 1 āļŦāļēāļāđ€āļ›āđ‡āļ™āđ„āļ›āđ„āļĄāđˆāđ„āļ”āđ‰ āđƒāļŦāđ‰āļāļĨāļąāļšāđ„āļ›āļ—āļĩāđˆāļˆāļļāļ”āļĒāļ­āļ”āļāđˆāļ­āļ™āļŦāļ™āđ‰āļēāļ™āļąāđ‰āļ™āđāļĨāļ°āļ•āđˆāļ­āđ„āļ›āđ€āļĢāļ·āđˆāļ­āļĒāđ† āļˆāļ™āļāļ§āđˆāļēāđ€āļĢāļēāļˆāļ°āļžāļšāļˆāļļāļ”āļĒāļ­āļ”āļ—āļĩāđˆāđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđ€āļ”āļīāļ™āļ—āļēāļ‡āļ•āđˆāļ­āđ„āļ”āđ‰
  5. āļ—āļģāļ•āđˆāļ­āđ„āļ›āļˆāļ™āļāļ§āđˆāļēāļˆāļļāļ”āļĒāļ­āļ”āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļˆāļ°āļ­āļĒāļđāđˆāļšāļ™āļŠāđāļ•āđ‡āļ
āļ„āļģāļ–āļēāļĄ & āļ„āļģāļ•āļ­āļšāļˆāļēāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™: āļ­āļąāļĨāļāļ­āļĢāļīāļ˜āļķāļĄāđƒāļ™ Java āļ•āļ­āļ™āļ—āļĩāđˆ 2 - 7āļĄāļēāļ”āļđāļāļąāļ™āļ§āđˆāļēāđ‚āļ„āđ‰āļ” Java āļŠāļģāļŦāļĢāļąāļšāļ­āļąāļĨāļāļ­āļĢāļīāļ—āļķāļĄāļ™āļĩāđ‰āļ­āļēāļˆāļĄāļĩāļĨāļąāļāļĐāļ“āļ°āļ­āļĒāđˆāļēāļ‡āđ„āļĢ:
public class Graph {
  private final int MAX_VERTS = 10;
  private Vertex vertexArray[]; // Array of vertices
  private int adjMat[][]; // Adjacency matrix
  private int nVerts; // Current number of vertices
  private Stack stack;

  public Graph() { // Initialize internal fields
     vertexArray = new Vertex[MAX_VERTS];
     adjMat = new int[MAX_VERTS][MAX_VERTS];
     nVerts = 0;
     for (int j = 0; j < MAX_VERTS; j++) {
        for (int k = 0; k < MAX_VERTS; k++) {
           adjMat[j][k] = 0;
        }
     }
     stack = new Stack<>();
  }

  public void addVertex(char lab) {
     vertexArray[nVerts++] = new Vertex(lab);
  }

  public void addEdge(int start, int end) {
     adjMat[start][end] = 1;
     adjMat[end][start] = 1;
  }

  public void displayVertex(int v) {
     System.out.println(vertexArray[v].getLabel());
  }

  public void dfs() { // Depth-first search
     vertexArray[0].setVisited(true); // Take the first vertex
     displayVertex(0);
     stack.push(0);

     while (!stack.empty()) {
        int v = getAdjUnvisitedVertex(stack.peek()); // Return the index of the adjacent vertex: if any, 1; if not, -1
        if (v == -1) { // If there is no unvisited adjacent vertex
           stack.pop(); // The element is removed from the stack
        }
        else {
           vertexArray[v].setVisited(true);
           displayVertex(v);
           stack.push(v); // The element goes on top of the stack
        }
     }

     for (int j = 0; j < nVerts; j++) {  // Reset the flags
        vertexArray[j].visited = false;
     }

  }

  private int getAdjUnvisitedVertex(int v) {
     for (int j = 0; j < nVerts; j++) {
        if (adjMat[v][j] == 1 && vertexArray[j].visited == false) {
           return j; // Returns the first vertex found
        }
     }
     return -1;
  }
}
āļˆāļļāļ”āļĒāļ­āļ”āļĄāļĩāļĨāļąāļāļĐāļ“āļ°āļ”āļąāļ‡āļ™āļĩāđ‰:
public class Vertex {
  private char label;  // for example, 'A'
  public boolean visited;

  public Vertex(final char label) {
     this.label = label;
     visited = false;
  }

  public char getLabel() {
     return this.label;
  }

  public boolean isVisited() {
     return this.visited;
  }

  public void setVisited(final boolean visited) {
     this.visited = visited;
  }
}
āļĨāļ­āļ‡āđƒāļŠāđ‰āļ­āļąāļĨāļāļ­āļĢāļīāļ—āļķāļĄāļ™āļĩāđ‰āļāļąāļšāļˆāļļāļ”āļĒāļ­āļ”āđ€āļ‰āļžāļēāļ°āđāļĨāđ‰āļ§āļ”āļđāļ§āđˆāļēāļ—āļģāļ‡āļēāļ™āļ–āļđāļāļ•āđ‰āļ­āļ‡āļŦāļĢāļ·āļ­āđ„āļĄāđˆ:
public class Solution {
  public static void main(String[] args) {
     Graph graph = new Graph();
     graph.addVertex('A'); //0
     graph.addVertex('B'); //1
     graph.addVertex('C'); //2
     graph.addVertex('D'); //3
     graph.addVertex('E'); //4
     graph.addVertex('F'); //5
     graph.addVertex('G'); //6

     graph.addEdge(0,1);
     graph.addEdge(0,2);
     graph.addEdge(0,3);
     graph.addEdge(1,4);
     graph.addEdge(3,5);
     graph.addEdge(5,6);

     System.out.println("Visits: ");
     graph.dfs();
  }
}
āđ€āļ­āļēāļ•āđŒāļžāļļāļ•āļ„āļ­āļ™āđ‚āļ‹āļĨ:
āđ€āļ‚āđ‰āļēāļŠāļĄ: ABECDFG
āđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļāđ€āļĢāļēāļĄāļĩāđ€āļĄāļ—āļĢāļīāļāļ‹āđŒ adjacency āđāļĨāļ°āļāļģāļĨāļąāļ‡āđƒāļŠāđ‰āļĨāļđāļ›āļ āļēāļĒāđƒāļ™āļĨāļđāļ› āļ„āļ§āļēāļĄāļ‹āļąāļšāļ‹āđ‰āļ­āļ™āļ‚āļ­āļ‡āđ€āļ§āļĨāļēāļˆāļ°āđ€āļ›āđ‡āļ™ O(NÂē)

āļāļēāļĢāļ„āđ‰āļ™āļŦāļēāđāļšāļšāļāļ§āđ‰āļēāļ‡āļāđˆāļ­āļ™

āđ€āļŠāđˆāļ™āđ€āļ”āļĩāļĒāļ§āļāļąāļšāļāļēāļĢāļ„āđ‰āļ™āļŦāļēāđ€āļŠāļīāļ‡āļĨāļķāļāļāđˆāļ­āļ™ āļ­āļąāļĨāļāļ­āļĢāļīāļ˜āļķāļĄāļ™āļĩāđ‰āđ€āļ›āđ‡āļ™āļŦāļ™āļķāđˆāļ‡āđƒāļ™āļ§āļīāļ˜āļĩāļāļēāļĢāļŠāļģāļĢāļ§āļˆāļāļĢāļēāļŸāļ—āļĩāđˆāļ‡āđˆāļēāļĒāđāļĨāļ°āļžāļ·āđ‰āļ™āļāļēāļ™āļ—āļĩāđˆāļŠāļļāļ” āļ›āļĢāļ°āđ€āļ”āđ‡āļ™āļŠāļģāļ„āļąāļāļ„āļ·āļ­āđ€āļĢāļēāļĄāļĩāļˆāļļāļ”āļĒāļ­āļ”āļ›āļąāļˆāļˆāļļāļšāļąāļ™āļ­āļĒāļđāđˆāļšāđ‰āļēāļ‡ āđ€āļĢāļēāđƒāļŠāđˆāļˆāļļāļ”āļĒāļ­āļ”āļ—āļĩāđˆāļ­āļĒāļđāđˆāļ•āļīāļ”āļāļąāļ™āļ—āļĩāđˆāļĒāļąāļ‡āđ„āļĄāđˆāđ„āļ”āđ‰āđ€āļĒāļĩāđˆāļĒāļĄāļŠāļĄāļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļĨāļ‡āđƒāļ™āļ„āļīāļ§āđāļĨāļ°āđ€āļĨāļ·āļ­āļāļ­āļ‡āļ„āđŒāļ›āļĢāļ°āļāļ­āļšāļ–āļąāļ”āđ„āļ› (āļ‹āļķāđˆāļ‡āđ€āļ›āđ‡āļ™āļˆāļļāļ”āļĒāļ­āļ”āļ—āļĩāđˆāđ€āļāđ‡āļšāđ„āļ§āđ‰āļ—āļĩāđˆāļŠāđˆāļ§āļ™āļŦāļąāļ§āļ‚āļ­āļ‡āļ„āļīāļ§) āļ‹āļķāđˆāļ‡āļāļĨāļēāļĒāđ€āļ›āđ‡āļ™āļˆāļļāļ”āļĒāļ­āļ”āļ›āļąāļˆāļˆāļļāļšāļąāļ™... āļāļēāļĢāđāļšāđˆāļ‡āļ­āļąāļĨāļāļ­āļĢāļīāļ—āļķāļĄāļ™āļĩāđ‰āļ­āļ­āļāđ€āļ›āđ‡āļ™āļ‚āļąāđ‰āļ™āļ•āļ­āļ™ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļĢāļ°āļšāļļāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ•āđˆāļ­āđ„āļ›āļ™āļĩāđ‰āđ„āļ”āđ‰:
  1. āđ€āļĒāļĩāđˆāļĒāļĄāļŠāļĄāļˆāļļāļ”āļĒāļ­āļ”āļ–āļąāļ”āđ„āļ›āļ—āļĩāđˆāļĒāļąāļ‡āđ„āļĄāđˆāđ„āļ”āđ‰āđ€āļĒāļĩāđˆāļĒāļĄāļŠāļĄāļ‹āļķāđˆāļ‡āļ­āļĒāļđāđˆāļ•āļīāļ”āļāļąāļšāļˆāļļāļ”āļŠāļļāļ”āļĒāļ­āļ”āļ›āļąāļˆāļˆāļļāļšāļąāļ™ āļ—āļģāđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļŦāļĄāļēāļĒāļ§āđˆāļēāđ€āļĒāļĩāđˆāļĒāļĄāļŠāļĄāđāļĨāđ‰āļ§āļĨāđˆāļ§āļ‡āļŦāļ™āđ‰āļē āđāļĨāļ°āđ€āļžāļīāđˆāļĄāļĨāļ‡āđƒāļ™āļ„āļīāļ§
  2. āļŦāļēāļāđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāļ‚āļąāđ‰āļ™āļ•āļ­āļ™ #1 āđ„āļ”āđ‰ āđƒāļŦāđ‰āļĨāļšāļˆāļļāļ”āļĒāļ­āļ”āļ­āļ­āļāļˆāļēāļāļ„āļīāļ§āđāļĨāļ°āļ—āļģāđƒāļŦāđ‰āđ€āļ›āđ‡āļ™āļˆāļļāļ”āļĒāļ­āļ”āļ›āļąāļˆāļˆāļļāļšāļąāļ™
  3. āļŦāļēāļāđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāļ‚āļąāđ‰āļ™āļ•āļ­āļ™ #1 āđāļĨāļ° #2 āđ„āļ”āđ‰ āđāļŠāļ”āļ‡āļ§āđˆāļēāđ€āļĢāļēāļ‚āđ‰āļēāļĄāļœāđˆāļēāļ™āđ€āļŠāļĢāđ‡āļˆāđāļĨāđ‰āļ§ — āļ—āļļāļāļˆāļļāļ”āļĒāļ­āļ”āļ–āļđāļāļŠāļģāļĢāļ§āļˆāđāļĨāđ‰āļ§ (āļŦāļēāļāđ€āļĢāļēāļĄāļĩāļāļĢāļēāļŸāļ—āļĩāđˆāđ€āļŠāļ·āđˆāļ­āļĄāđ‚āļĒāļ‡āļāļąāļ™)
āļ„āļģāļ–āļēāļĄ & āļ„āļģāļ•āļ­āļšāļˆāļēāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™: āļ­āļąāļĨāļāļ­āļĢāļīāļ˜āļķāļĄāđƒāļ™ Java āļ•āļ­āļ™āļ—āļĩāđˆ 2 - 8āļ„āļĨāļēāļŠāļāļĢāļēāļŸāļ—āļĩāđˆāļ™āļĩāđˆāđ€āļāļ·āļ­āļšāļˆāļ°āđ€āļŦāļĄāļ·āļ­āļ™āļāļąāļ™āļāļąāļšāļ„āļĨāļēāļŠāļ—āļĩāđˆāđ€āļĢāļēāđƒāļŠāđ‰āļŠāļģāļŦāļĢāļąāļšāļ­āļąāļĨāļāļ­āļĢāļīāļ˜āļķāļĄāļāļēāļĢāļ„āđ‰āļ™āļŦāļēāđ€āļŠāļīāļ‡āļĨāļķāļāļāđˆāļ­āļ™ āļĒāļāđ€āļ§āđ‰āļ™āļ§āļīāļ˜āļĩāļāļēāļĢāļ„āđ‰āļ™āļŦāļēāđ€āļ­āļ‡āđāļĨāļ°āļ„āļ§āļēāļĄāļˆāļĢāļīāļ‡āļ—āļĩāđˆāļ§āđˆāļēāļ„āļīāļ§āļˆāļ°āđāļ—āļ™āļ—āļĩāđˆāļŠāđāļ•āđ‡āļāļ āļēāļĒāđƒāļ™:
public class Graph {
  private final int MAX_VERTS = 10;
  private Vertex vertexList[]; // Array of vertices
  private int adjMat[][]; // Adjacency matrix
  private int nVerts; // Current number of vertices
  private Queue queue;

  public Graph() {
     vertexList = new Vertex[MAX_VERTS];
     adjMat = new int[MAX_VERTS][MAX_VERTS];
     nVerts = 0;
     for (int j = 0; j < MAX_VERTS; j++) {
        for (int k = 0; k < MAX_VERTS; k++) {  // Fill the adjacency matrix with zeros
           adjMat[j][k] = 0;
        }
     }
     queue = new PriorityQueue<>();
  }

  public void addVertex(char lab) {
     vertexList[nVerts++] = new Vertex(lab);
  }

  public void addEdge(int start, int end) {
     adjMat[start][end] = 1;
     adjMat[end][start] = 1;
  }

  public void displayVertex(int v) {
     System.out.println(vertexList[v].getLabel());
  }

  public void bfc() { // Depth-first search
     vertexList[0].setVisited(true);
     displayVertex(0);
     queue.add(0);
     int v2;

     while (!queue.isEmpty()) {
        int v = queue.remove();

        while((v2 = getAdjUnvisitedVertex(v))!=-1) {// The loop runs until every adjacent vertex is found and added to the queue
           vertexList[v2].visited = true;
           displayVertex(v2);
           queue.add(v2);
        }
     }

     for (int j = 0; j < nVerts; j++) {  // Reset the flags
        vertexList[j].visited = false;
     }

  }

  private int getAdjUnvisitedVertex(int v) {
     for (int j = 0; j < nVerts; j++) {
        if (adjMat[v][j] == 1 && vertexList[j].visited == false) {
           return j; // Returns the first vertext found
        }
     }
     return -1;
  }
}
āļ„āļĨāļēāļŠ Vertex āļ™āļąāđ‰āļ™āđ€āļŦāļĄāļ·āļ­āļ™āļāļąāļšāļ„āļĨāļēāļŠāļ—āļĩāđˆāđ€āļĢāļēāđƒāļŠāđ‰āļāļąāļšāļ­āļąāļĨāļāļ­āļĢāļīāļ˜āļķāļĄāļāļēāļĢāļ„āđ‰āļ™āļŦāļēāđ€āļŠāļīāļ‡āļĨāļķāļāđ€āļ›āđ‡āļ™āļ­āļąāļ™āļ”āļąāļšāđāļĢāļ āđ€āļĢāļēāļĄāļēāļĨāļ­āļ‡āļ™āļģāļ­āļąāļĨāļāļ­āļĢāļīāļ—āļķāļĄāļ™āļĩāđ‰āđ„āļ›āđƒāļŠāđ‰āļˆāļĢāļīāļ‡:
public class Solution {
  public static void main(String[] args) {
     Graph graph = new Graph();
     graph.addVertex('A'); //0
     graph.addVertex('B'); //1
     graph.addVertex('C'); //2
     graph.addVertex('D'); //3
     graph.addVertex('E'); //4
     graph.addVertex('F'); //5
     graph.addVertex('G'); //6

     graph.addEdge(0,1);
     graph.addEdge(0,2);
     graph.addEdge(0,3);
     graph.addEdge(1,4);
     graph.addEdge(3,5);
     graph.addEdge(5,6);

     System.out.println("Visits: ");
     graph.bfc();
  }
}
āđ€āļ­āļēāļ•āđŒāļžāļļāļ•āļ„āļ­āļ™āđ‚āļ‹āļĨ:
āļāļēāļĢāđ€āļ‚āđ‰āļēāļŠāļĄ: ABCDEFG
āļ­āļĩāļāļ„āļĢāļąāđ‰āļ‡: āđ€āļĢāļēāļĄāļĩāđ€āļĄāļ—āļĢāļīāļāļ‹āđŒ adjacency āđāļĨāļ°āđƒāļŠāđ‰āļĨāļđāļ›āļ—āļĩāđˆāļ‹āđ‰āļ­āļ™āļāļąāļ™āļ āļēāļĒāđƒāļ™āļĨāļđāļ› āļ”āļąāļ‡āļ™āļąāđ‰āļ™āļ„āļ§āļēāļĄāļ‹āļąāļšāļ‹āđ‰āļ­āļ™āļ‚āļ­āļ‡āđ€āļ§āļĨāļēāļ‚āļ­āļ‡āļ­āļąāļĨāļāļ­āļĢāļīāļ—āļķāļĄāļ‚āđ‰āļēāļ‡āļ•āđ‰āļ™āļ„āļ·āļ­ O(NÂē)

4. āļ­āļąāļĨāļāļ­āļĢāļīāļ—āļķāļĄāļ‚āļ­āļ‡ Dijkstra

āļ•āļēāļĄāļ—āļĩāđˆāļāļĨāđˆāļēāļ§āđ„āļ§āđ‰āļ‚āđ‰āļēāļ‡āļ•āđ‰āļ™ āļāļĢāļēāļŸāļŠāļēāļĄāļēāļĢāļ–āļāļģāļŦāļ™āļ”āļ—āļīāļĻāļ—āļēāļ‡āļŦāļĢāļ·āļ­āđ„āļĄāđˆāļĄāļĩāļ—āļīāļĻāļ—āļēāļ‡āđ„āļ”āđ‰ āđāļĨāļ°āļ„āļļāļ“āļˆāļ°āļˆāļģāđ„āļ”āđ‰āļ§āđˆāļēāļŠāļēāļĄāļēāļĢāļ–āļ–āđˆāļ§āļ‡āļ™āđ‰āļģāļŦāļ™āļąāļāđ„āļ”āđ‰āđ€āļŠāđˆāļ™āļāļąāļ™ āļ„āļ§āļēāļĄāļŠāļąāļĄāļžāļąāļ™āļ˜āđŒāļ‚āļ­āļ‡āđāļšāļšāļˆāļģāļĨāļ­āļ‡āļāļĢāļēāļŸāļāļģāļāļąāļšāđāļšāļšāļ–āđˆāļ§āļ‡āļ™āđ‰āļģāļŦāļ™āļąāļāļ—āļĩāđˆāļĄāļąāļāļžāļšāđƒāļ™āļŠāļĩāļ§āļīāļ•āļˆāļĢāļīāļ‡ āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āđ€āļŠāđˆāļ™ āđāļœāļ™āļ—āļĩāđˆāđ€āļĄāļ·āļ­āļ‡āļ—āļĩāđˆāđ€āļĄāļ·āļ­āļ‡āļ•āđˆāļēāļ‡āđ† āđ€āļ›āđ‡āļ™āļˆāļļāļ”āļĒāļ­āļ” āđāļĨāļ°āļ‚āļ­āļšāļĢāļ°āļŦāļ§āđˆāļēāļ‡āđ€āļĄāļ·āļ­āļ‡āđ€āļŦāļĨāđˆāļēāļ™āļąāđ‰āļ™āđ€āļ›āđ‡āļ™āļ–āļ™āļ™āļ—āļĩāđˆāļĄāļĩāļāļēāļĢāļˆāļĢāļēāļˆāļĢāļ—āļēāļ‡āđ€āļ”āļĩāļĒāļ§āļ‹āļķāđˆāļ‡āđ„āļŦāļĨāđ„āļ›āđƒāļ™āļ—āļīāļĻāļ—āļēāļ‡āļ‚āļ­āļ‡āļ‚āļ­āļšāļ—āļĩāđˆāļāļģāļŦāļ™āļ” āļŠāļĄāļĄāļ•āļīāļ§āđˆāļēāļ„āļļāļ“āđ€āļ›āđ‡āļ™āļšāļĢāļīāļĐāļąāļ—āļ‚āļ™āļŠāđˆāļ‡āļŠāļīāļ™āļ„āđ‰āļē āđāļĨāļ°āļ„āļļāļ“āļ•āđ‰āļ­āļ‡āļ„āđ‰āļ™āļŦāļēāđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļ—āļĩāđˆāļŠāļąāđ‰āļ™āļ—āļĩāđˆāļŠāļļāļ”āļĢāļ°āļŦāļ§āđˆāļēāļ‡āļŠāļ­āļ‡āđ€āļĄāļ·āļ­āļ‡āļ—āļĩāđˆāļŦāđˆāļēāļ‡āđ„āļāļĨ āļ„āļļāļ“āļˆāļ°āļ—āļģāļĄāļąāļ™āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ„āļĢ? āļāļēāļĢāļ„āđ‰āļ™āļŦāļēāđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļ—āļĩāđˆāļŠāļąāđ‰āļ™āļ—āļĩāđˆāļŠāļļāļ”āļĢāļ°āļŦāļ§āđˆāļēāļ‡āļˆāļļāļ”āļĒāļ­āļ”āļŠāļ­āļ‡āļˆāļļāļ”āđ€āļ›āđ‡āļ™āļ›āļąāļāļŦāļēāļ—āļĩāđˆāļžāļšāļšāđˆāļ­āļĒāļ—āļĩāđˆāļŠāļļāļ”āļ›āļąāļāļŦāļēāļŦāļ™āļķāđˆāļ‡āļ—āļĩāđˆāđāļāđ‰āđ„āļ‚āđ„āļ”āđ‰āđ‚āļ”āļĒāđƒāļŠāđ‰āļāļĢāļēāļŸāļ–āđˆāļ§āļ‡āļ™āđ‰āļģāļŦāļ™āļąāļ āđ€āļžāļ·āđˆāļ­āđāļāđ‰āđ„āļ‚āļ›āļąāļāļŦāļēāļ™āļĩāđ‰ āđ€āļĢāļēāđƒāļŠāđ‰āļ­āļąāļĨāļāļ­āļĢāļīāļ—āļķāļĄāļ‚āļ­āļ‡ Dijkstra āđ€āļĄāļ·āđˆāļ­āļ„āļļāļ“āļĢāļąāļ™āđāļĨāđ‰āļ§ āļ„āļļāļ“āļˆāļ°āļĢāļđāđ‰āđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļ—āļĩāđˆāļŠāļąāđ‰āļ™āļ—āļĩāđˆāļŠāļļāļ”āļˆāļēāļāļˆāļļāļ”āļĒāļ­āļ”āđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™āļ—āļĩāđˆāļāļģāļŦāļ™āļ”āđ„āļ›āļĒāļąāļ‡āļˆāļļāļ”āļĒāļ­āļ”āļ­āļ·āđˆāļ™āđ† āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ‚āļ­āļ‡āļ­āļąāļĨāļāļ­āļĢāļīāļ—āļķāļĄāļ™āļĩāđ‰āļĄāļĩāļ­āļ°āđ„āļĢāļšāđ‰āļēāļ‡? āļ‰āļąāļ™āļˆāļ°āļžāļĒāļēāļĒāļēāļĄāļ•āļ­āļšāļ„āļģāļ–āļēāļĄāļ™āļĩāđ‰ āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ‚āļ­āļ‡āļ­āļąāļĨāļāļ­āļĢāļīāļ—āļķāļĄāļ‚āļ­āļ‡ Dijkstra:
  • āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ—āļĩāđˆ 1: āļ„āđ‰āļ™āļŦāļēāđ‚āļŦāļ™āļ”āļ—āļĩāđˆāļ­āļĒāļđāđˆāļ•āļīāļ”āļāļąāļ™āļ‹āļķāđˆāļ‡āļĄāļĩāļ•āđ‰āļ™āļ—āļļāļ™āļāļēāļĢāļ™āļģāļ—āļēāļ‡āļ•āđˆāļģāļ—āļĩāđˆāļŠāļļāļ” (āļ™āđ‰āļģāļŦāļ™āļąāļāļ‚āļ­āļšāļ•āđˆāļģāļŠāļļāļ”) āļ„āļļāļ“āļāļģāļĨāļąāļ‡āļĒāļ·āļ™āļ­āļĒāļđāđˆāļ—āļĩāđˆāļˆāļļāļ”āđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™āđāļĨāļ°āļ„āļīāļ”āļ§āđˆāļēāļˆāļ°āđ„āļ›āļ—āļĩāđˆāđ„āļŦāļ™: āđ„āļ›āļĒāļąāļ‡āđ‚āļŦāļ™āļ” A āļŦāļĢāļ·āļ­āđ‚āļŦāļ™āļ” B āļāļēāļĢāļĒāđ‰āļēāļĒāđ„āļ›āļĒāļąāļ‡āđāļ•āđˆāļĨāļ°āđ‚āļŦāļ™āļ”āđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰āļĄāļĩāļ„āđˆāļēāđƒāļŠāđ‰āļˆāđˆāļēāļĒāđ€āļ—āđˆāļēāđ„āļĢ
  • āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ—āļĩāđˆ 2: āļ„āļģāļ™āļ§āļ“āļĢāļ°āļĒāļ°āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāđ€āļ”āļīāļ™āļ—āļēāļ‡āđ„āļ›āļĒāļąāļ‡āđ€āļžāļ·āđˆāļ­āļ™āļšāđ‰āļēāļ™āļ‚āļ­āļ‡āđ‚āļŦāļ™āļ”āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļ—āļĩāđˆāļ­āļąāļĨāļāļ­āļĢāļīāļ˜āļķāļĄāļĒāļąāļ‡āđ„āļĄāđˆāđ„āļ”āđ‰āđ€āļĒāļĩāđˆāļĒāļĄāļŠāļĄāđ€āļĄāļ·āđˆāļ­āļŠāļģāļĢāļ§āļˆāļ‚āļ­āļšāļˆāļēāļ В āļŦāļēāļāļĢāļ°āļĒāļ°āļ—āļēāļ‡āđƒāļŦāļĄāđˆāļ™āđ‰āļ­āļĒāļāļ§āđˆāļēāļĢāļ°āļĒāļ°āļ—āļēāļ‡āđ€āļāđˆāļē āđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļœāđˆāļēāļ™āļ‚āļ­āļš B āļˆāļ°āļāļĨāļēāļĒāđ€āļ›āđ‡āļ™āđ€āļŠāđ‰āļ™āļ—āļēāļ‡āđƒāļŦāļĄāđˆāļ—āļĩāđˆāļŠāļąāđ‰āļ™āļ—āļĩāđˆāļŠāļļāļ”āļŠāļģāļŦāļĢāļąāļšāļˆāļļāļ”āļĒāļ­āļ”āļ™āļĩāđ‰
  • āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ—āļĩāđˆ 3: āļ—āļģāđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļŦāļĄāļēāļĒāļˆāļļāļ”āļĒāļ­āļ” B āļ§āđˆāļēāđ€āļĒāļĩāđˆāļĒāļĄāļŠāļĄāđāļĨāđ‰āļ§
  • āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ—āļĩāđˆ 4: āđ„āļ›āļ—āļĩāđˆāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ—āļĩāđˆ 1
āđ€āļĢāļēāļˆāļ°āļ—āļģāļ‹āđ‰āļģāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰āđāļšāļšāļ§āļ™āļ‹āđ‰āļģāļˆāļ™āļāļ§āđˆāļēāļˆāļ°āļ–āļķāļ‡āļˆāļļāļ”āļĒāļ­āļ”āļ—āļąāđ‰āļ‡āļŦāļĄāļ” āļĨāļ­āļ‡āļžāļīāļˆāļēāļĢāļ“āļēāļāļĢāļēāļŸāļāļģāļāļąāļšāđāļšāļšāļ–āđˆāļ§āļ‡āļ™āđ‰āļģāļŦāļ™āļąāļāļ•āđˆāļ­āđ„āļ›āļ™āļĩāđ‰: āļ„āļģāļ–āļēāļĄ & āļ„āļģāļ•āļ­āļšāļˆāļēāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™: āļ­āļąāļĨāļāļ­āļĢāļīāļ˜āļķāļĄāđƒāļ™ Java āļ•āļ­āļ™āļ—āļĩāđˆ 2 - 9āđ‚āļ”āļĒāđƒāļŠāđ‰āļ­āļąāļĨāļāļ­āļĢāļīāļ—āļķāļĄāļ‚āđ‰āļēāļ‡āļ•āđ‰āļ™ āđ€āļĢāļēāļˆāļ°āļāļģāļŦāļ™āļ”āđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļ—āļĩāđˆāļŠāļąāđ‰āļ™āļ—āļĩāđˆāļŠāļļāļ”āļˆāļēāļ A āļ–āļķāļ‡ G:
  1. āļĄāļĩāļŠāļēāļĄāđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļ—āļĩāđˆāđ€āļ›āđ‡āļ™āđ„āļ›āđ„āļ”āđ‰āļŠāļģāļŦāļĢāļąāļšāļˆāļļāļ”āļĒāļ­āļ” A: āđ„āļ›āļĒāļąāļ‡ B āļ—āļĩāđˆāļĄāļĩāļ™āđ‰āļģāļŦāļ™āļąāļ 3 āļ–āļķāļ‡ ÐĄ āļ—āļĩāđˆāļĄāļĩāļ™āđ‰āļģāļŦāļ™āļąāļ 5 āđāļĨāļ°āđ„āļ›āļĒāļąāļ‡ D āļ—āļĩāđˆāļĄāļĩāļ™āđ‰āļģāļŦāļ™āļąāļ 7 āļ•āļēāļĄāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđāļĢāļāļ‚āļ­āļ‡āļ­āļąāļĨāļāļ­āļĢāļīāļ—āļķāļĄ āđ€āļĢāļēāđ€āļĨāļ·āļ­āļāđ‚āļŦāļ™āļ”āļ—āļĩāđˆāļĄāļĩāļ•āđ‰āļ™āļ—āļļāļ™āļ•āđˆāļģāļ—āļĩāđˆāļŠāļļāļ” (āļ™āđ‰āļģāļŦāļ™āļąāļāļ‚āļ­āļš) āđƒāļ™āļāļĢāļ“āļĩāļ™āļĩāđ‰ āļšāļĩ.

  2. āđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļāđ€āļžāļ·āđˆāļ­āļ™āļšāđ‰āļēāļ™āļ—āļĩāđˆāđ„āļĄāđˆāļĄāļĩāđƒāļ„āļĢāđ€āļĒāļĩāđˆāļĒāļĄāļŠāļĄāđ€āļžāļĩāļĒāļ‡āļ„āļ™āđ€āļ”āļĩāļĒāļ§āļ‚āļ­āļ‡ B āļ„āļ·āļ­āļˆāļļāļ”āļĒāļ­āļ” Е āđ€āļĢāļēāļˆāļķāļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āđˆāļēāđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļˆāļ°āđ€āļ›āđ‡āļ™āđ€āļŠāđˆāļ™āđ„āļĢāļŦāļēāļāđ€āļĢāļēāļœāđˆāļēāļ™āļˆāļļāļ”āļĒāļ­āļ”āļ™āļĩāđ‰ 3(AB) + 6(āļž.āļĻ.) = 9.

    āļ”āļąāļ‡āļ™āļąāđ‰āļ™āđ€āļĢāļēāļˆāļķāļ‡āļšāļąāļ™āļ—āļķāļāļ§āđˆāļēāđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļ—āļĩāđˆāļŠāļąāđ‰āļ™āļ—āļĩāđˆāļŠāļļāļ”āđƒāļ™āļ›āļąāļˆāļˆāļļāļšāļąāļ™āļˆāļēāļ A āļ–āļķāļ‡ E āļ„āļ·āļ­ 9

  3. āđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļāļ‡āļēāļ™āļ‚āļ­āļ‡āđ€āļĢāļēāļāļąāļšāļˆāļļāļ”āļĒāļ­āļ” B āđ€āļŠāļĢāđ‡āļˆāļŠāļĄāļšāļđāļĢāļ“āđŒāđāļĨāđ‰āļ§ āđ€āļĢāļēāļˆāļķāļ‡āļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāđ€āļĨāļ·āļ­āļāļˆāļļāļ”āļĒāļ­āļ”āļ–āļąāļ”āđ„āļ›āļ—āļĩāđˆāļ‚āļ­āļšāļĄāļĩāļ™āđ‰āļģāļŦāļ™āļąāļāļ‚āļąāđ‰āļ™āļ•āđˆāļģ

    āļˆāļēāļāļˆāļļāļ”āļĒāļ­āļ” A āđāļĨāļ° B āļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™āđ„āļ›āđ„āļ”āđ‰āļ„āļ·āļ­āļˆāļļāļ”āļĒāļ­āļ” D (7), C (5) āļŦāļĢāļ·āļ­ E (6)

    āļ‚āļ­āļšāļ–āļķāļ‡ ÐĄ āļĄāļĩāļ™āđ‰āļģāļŦāļ™āļąāļāļ™āđ‰āļ­āļĒāļ—āļĩāđˆāļŠāļļāļ” āļ”āļąāļ‡āļ™āļąāđ‰āļ™āđ€āļĢāļēāļˆāļķāļ‡āđ„āļ›āļ—āļĩāđˆāļˆāļļāļ”āļĒāļ­āļ”āļ™āļĩāđ‰

  4. āļ•āđˆāļ­āđ„āļ› āđ€āļŠāđˆāļ™āđ€āļ„āļĒ āđ€āļĢāļēāļˆāļ°āļ„āđ‰āļ™āļŦāļēāđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļ—āļĩāđˆāļŠāļąāđ‰āļ™āļ—āļĩāđˆāļŠāļļāļ”āđ„āļ›āļĒāļąāļ‡āļˆāļļāļ”āļĒāļ­āļ”āļ‚āđ‰āļēāļ‡āđ€āļ„āļĩāļĒāļ‡āđ€āļĄāļ·āđˆāļ­āļœāđˆāļēāļ™ C:

    • AD = 5 (AC) + 3 (CD) = 8 āđāļ•āđˆāđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļāđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļ—āļĩāđˆāļŠāļąāđ‰āļ™āļ—āļĩāđˆāļŠāļļāļ”āļāđˆāļ­āļ™āļŦāļ™āđ‰āļē (AC = 7) āļ™āđ‰āļ­āļĒāļāļ§āđˆāļēāđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļ™āļĩāđ‰āļ–āļķāļ‡ ÐĄ āđ€āļĢāļēāļˆāļķāļ‡āļ„āļ‡āđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļ—āļĩāđˆāļŠāļąāđ‰āļ™āļ—āļĩāđˆāļŠāļļāļ” (AC = 7) āđ„āļ§āđ‰āđ„āļĄāđˆāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡

    • CE = 5(AC) + 4(CE) = 9 āđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļ—āļĩāđˆāļŠāļąāđ‰āļ™āļ—āļĩāđˆāļŠāļļāļ”āđƒāļŦāļĄāđˆāļ™āļĩāđ‰āđ€āļ—āđˆāļēāļāļąāļšāđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļāđˆāļ­āļ™āļŦāļ™āđ‰āļē āļ”āļąāļ‡āļ™āļąāđ‰āļ™āđ€āļĢāļēāļˆāļķāļ‡āļ›āļĨāđˆāļ­āļĒāđƒāļŦāđ‰āļĄāļąāļ™āđ„āļĄāđˆāļĄāļĩāļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡

  5. āļˆāļēāļāļˆāļļāļ”āļĒāļ­āļ”āļ—āļĩāđˆāđƒāļāļĨāđ‰āļ—āļĩāđˆāļŠāļļāļ”āļ—āļĩāđˆāđ€āļ‚āđ‰āļēāļ–āļķāļ‡āđ„āļ”āđ‰ (E āđāļĨāļ° D) āđƒāļŦāđ‰āđ€āļĨāļ·āļ­āļāļˆāļļāļ”āļĒāļ­āļ”āļ—āļĩāđˆāļĄāļĩāļ™āđ‰āļģāļŦāļ™āļąāļāļ‚āļ­āļšāļ™āđ‰āļ­āļĒāļ—āļĩāđˆāļŠāļļāļ” āđ€āļŠāđˆāļ™ D (3)

  6. āđ€āļĢāļēāļžāļšāđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļ—āļĩāđˆāļŠāļąāđ‰āļ™āļ—āļĩāđˆāļŠāļļāļ”āđ„āļ›āļĒāļąāļ‡āđ€āļžāļ·āđˆāļ­āļ™āļšāđ‰āļēāļ™ F.

    AF = 7(āđ‚āļ†āļĐāļ“āļē) + 3(DF) = 9

  7. āļˆāļēāļāļˆāļļāļ”āļĒāļ­āļ”āļ—āļĩāđˆāđƒāļāļĨāđ‰āļ—āļĩāđˆāļŠāļļāļ”āļ—āļĩāđˆāđ€āļ‚āđ‰āļēāļ–āļķāļ‡āđ„āļ”āđ‰ (E āđāļĨāļ° F) āđƒāļŦāđ‰āđ€āļĨāļ·āļ­āļāļˆāļļāļ”āļĒāļ­āļ”āļ—āļĩāđˆāļĄāļĩāļ™āđ‰āļģāļŦāļ™āļąāļāļ‚āļ­āļšāļ™āđ‰āļ­āļĒāļ—āļĩāđˆāļŠāļļāļ” āđ€āļŠāđˆāļ™ F (3)

  8. āļ„āđ‰āļ™āļŦāļēāđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļ—āļĩāđˆāļŠāļąāđ‰āļ™āļ—āļĩāđˆāļŠāļļāļ”āđ„āļ›āļĒāļąāļ‡āđ€āļžāļ·āđˆāļ­āļ™āļšāđ‰āļēāļ™ G.

    āđ€āļ­āļˆāļĩ = 7(āđ‚āļ†āļĐāļ“āļē) + 3(DF) + 4(FG) = 14

    āļ”āļąāļ‡āļ™āļąāđ‰āļ™āđ€āļĢāļēāļˆāļķāļ‡āļžāļšāđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļˆāļēāļ A āļ–āļķāļ‡ G

    āđāļ•āđˆāđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āđāļ™āđˆāđƒāļˆāļ§āđˆāļēāļĄāļąāļ™āļŠāļąāđ‰āļ™āļ—āļĩāđˆāļŠāļļāļ” āđ€āļĢāļēāļ•āđ‰āļ­āļ‡āļ—āļģāļ•āļēāļĄāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ‚āļ­āļ‡āđ€āļĢāļēāļšāļ™āļˆāļļāļ”āļĒāļ­āļ” E āļ”āđ‰āļ§āļĒ

  9. āđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļāļˆāļļāļ”āļĒāļ­āļ” G āđ„āļĄāđˆāļĄāļĩāļˆāļļāļ”āļĒāļ­āļ”āļ‚āđ‰āļēāļ‡āđ€āļ„āļĩāļĒāļ‡āļ—āļĩāđˆāļŠāļĩāđ‰āđ„āļ›āđ‚āļ”āļĒāļ‚āļ­āļšāļ—āļĩāđˆāļāļģāļŦāļ™āļ” āđ€āļĢāļēāļˆāļķāļ‡āđ€āļŦāļĨāļ·āļ­āđ€āļžāļĩāļĒāļ‡āļˆāļļāļ”āļĒāļ­āļ” E āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™ āļ”āļąāļ‡āļ™āļąāđ‰āļ™āđ€āļĢāļēāļˆāļķāļ‡āđ€āļĨāļ·āļ­āļāļĄāļąāļ™

  10. āļ„āđ‰āļ™āļŦāļēāđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļ—āļĩāđˆāļŠāļąāđ‰āļ™āļ—āļĩāđˆāļŠāļļāļ”āđ„āļ›āļĒāļąāļ‡āđ€āļžāļ·āđˆāļ­āļ™āļšāđ‰āļēāļ™ G.

    AG = 3 (AB) + 6 (BE) + 6 (EG) = 15 āđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļ™āļĩāđ‰āļĒāļēāļ§āļāļ§āđˆāļēāđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļ—āļĩāđˆāļŠāļąāđ‰āļ™āļ—āļĩāđˆāļŠāļļāļ”āļāđˆāļ­āļ™āļŦāļ™āđ‰āļē (AG (14)) āļ”āļąāļ‡āļ™āļąāđ‰āļ™āđ€āļĢāļēāļˆāļķāļ‡āļ›āļĨāđˆāļ­āļĒāđƒāļŦāđ‰āđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļ™āļĩāđ‰āđ„āļĄāđˆāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡

    āđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļāđ„āļĄāđˆāļĄāļĩāļˆāļļāļ”āļĒāļ­āļ”āļ—āļĩāđˆāļ™āļģāļˆāļēāļ G āļˆāļķāļ‡āđ„āļĄāđˆāļŠāļĄāđ€āļŦāļ•āļļāļŠāļĄāļœāļĨāļ—āļĩāđˆāļˆāļ°āļĢāļąāļ™āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļšāļ™āļ­āļąāļĨāļāļ­āļĢāļīāļ—āļķāļĄāļšāļ™āļˆāļļāļ”āļĒāļ­āļ”āļ™āļĩāđ‰ āļ™āļąāđˆāļ™āļŦāļĄāļēāļĒāļ„āļ§āļēāļĄāļ§āđˆāļēāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ‚āļ­āļ‡āļ­āļąāļĨāļāļ­āļĢāļīāļ˜āļķāļĄāđ€āļŠāļĢāđ‡āļˆāļŠāļĄāļšāļđāļĢāļ“āđŒ

āļ”āļąāļ‡āļ—āļĩāđˆāđ„āļ”āđ‰āļāļĨāđˆāļēāļ§āđ„āļ›āđāļĨāđ‰āļ§āļ‚āđ‰āļēāļ‡āļ•āđ‰āļ™ āļ™āļ­āļāđ€āļŦāļ™āļ·āļ­āļˆāļēāļāļāļēāļĢāļ„āđ‰āļ™āļŦāļēāđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļ—āļĩāđˆāļŠāļąāđ‰āļ™āļ—āļĩāđˆāļŠāļļāļ”āļŠāļģāļŦāļĢāļąāļš AG āđāļĨāđ‰āļ§ āđ€āļĢāļēāļĒāļąāļ‡āđ„āļ”āđ‰āļĢāļąāļšāđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļ—āļĩāđˆāļŠāļąāđ‰āļ™āļ—āļĩāđˆāļŠāļļāļ”āļˆāļēāļāļˆāļļāļ”āļĒāļ­āļ” A āđ„āļ›āļĒāļąāļ‡āļˆāļļāļ”āļĒāļ­āļ”āļ­āļ·āđˆāļ™āđ† (AB, AC, AD, AE, AF) āļ•āļ­āļ™āļ™āļĩāđ‰āļ–āļķāļ‡āđ€āļ§āļĨāļēāļĄāļēāļ”āļđāļāļąāļ™āļ§āđˆāļēāļŠāļīāđˆāļ‡āļ™āļĩāđ‰āļŠāļēāļĄāļēāļĢāļ–āļ—āļģāđ„āļ”āđ‰āđƒāļ™ Java āļ­āļĒāđˆāļēāļ‡āđ„āļĢ āđ€āļĢāļīāđˆāļĄāļˆāļēāļāļ„āļĨāļēāļŠāļˆāļļāļ”āļĒāļ­āļ”āļāļąāļ™āļāđˆāļ­āļ™:
public class Vertex {
   private char label;
   private boolean isInTree;

   public Vertex(char label) {
       this.label = label;
       this.isInTree = false;
   }

   public char getLabel() {
       return label;
   }

   public void setLabel(char label) {
       this.label = label;
   }

   public boolean isInTree() {
       return isInTree;
   }

   public void setInTree(boolean inTree) {
       isInTree = inTree;
   }
}
āļ„āļĨāļēāļŠāļˆāļļāļ”āļŠāļļāļ”āļĒāļ­āļ”āđāļ—āļšāļˆāļ°āđ€āļŦāļĄāļ·āļ­āļ™āļāļąāļšāļ„āļĨāļēāļŠāļˆāļļāļ”āļŠāļļāļ”āļĒāļ­āļ”āļ—āļĩāđˆāđƒāļŠāđ‰āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ„āđ‰āļ™āļŦāļēāđāļšāļšāļāļ§āđ‰āļēāļ‡āļāđˆāļ­āļ™ āđƒāļ™āļāļēāļĢāđāļŠāļ”āļ‡āđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļ—āļĩāđˆāļŠāļąāđ‰āļ™āļ—āļĩāđˆāļŠāļļāļ” āđ€āļĢāļēāļˆāļģāđ€āļ›āđ‡āļ™āļ•āđ‰āļ­āļ‡āļĄāļĩāļ„āļĨāļēāļŠāđƒāļŦāļĄāđˆāļ—āļĩāđˆāļˆāļ°āļĄāļĩāļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđˆāđ€āļĢāļēāļ•āđ‰āļ­āļ‡āļāļēāļĢ:
public class Path { // A class that contains the distance and the previous and traversed vertices
   private int distance; // Current distance from the starting vertex
   private List parentVertices; // Current parent vertex

   public Path(int distance) {
       this.distance = distance;
       this.parentVertices = new ArrayList<>();
   }

   public int getDistance() {
       return distance;
   }

   public void setDistance(int distance) {
       this.distance = distance;
   }

   public List getParentVertices() {
       return parentVertices;
   }

   public void setParentVertices(List parentVertices) {
       this.parentVertices = parentVertices;
   }
}
āđƒāļ™āļŠāļąāđ‰āļ™āđ€āļĢāļĩāļĒāļ™āļ™āļĩāđ‰ āđ€āļĢāļēāļˆāļ°āđ€āļŦāđ‡āļ™āļĢāļ°āļĒāļ°āļ—āļēāļ‡āļĢāļ§āļĄāļ‚āļ­āļ‡āđ€āļŠāđ‰āļ™āļ—āļēāļ‡āđāļĨāļ°āļˆāļļāļ”āļĒāļ­āļ”āļ—āļĩāđˆāļˆāļ°āđ€āļ„āļĨāļ·āđˆāļ­āļ™āļ—āļĩāđˆāđ€āļĄāļ·āđˆāļ­āļœāđˆāļēāļ™āđ„āļ›āļ•āļēāļĄāđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļ—āļĩāđˆāļŠāļąāđ‰āļ™āļ—āļĩāđˆāļŠāļļāļ” āļ—āļĩāļ™āļĩāđ‰āļĨāļ­āļ‡āļ”āļđāļ„āļĨāļēāļŠāļ—āļĩāđˆāđ€āļĢāļēāļŠāļģāļĢāļ§āļˆāđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļ—āļĩāđˆāļŠāļąāđ‰āļ™āļ—āļĩāđˆāļŠāļļāļ”āļœāđˆāļēāļ™āļāļĢāļēāļŸāļāļąāļ™ āļ”āļąāļ‡āļ™āļąāđ‰āļ™āđ€āļĢāļēāļˆāļķāļ‡āļĄāļĩāļ„āļĨāļēāļŠāļāļĢāļēāļŸ:
public class Graph {
   private final int MAX_VERTS = 10;// Maximum number of vertices
   private final int INFINITY = 100000000; // This number represents infinity
   private Vertex vertexList[]; // List of vertices
   private int relationMatrix[][]; // Matrix of edges between vertices
   private int numberOfVertices; // Current number of vertices
   private int numberOfVerticesInTree; // Number of visited vertices in the tree
   private List shortestPaths; // List of shortest paths
   private int currentVertex; // Current vertex
   private int startToCurrent; // Distance to currentVertex

   public Graph() {
       vertexList = new Vertex[MAX_VERTS]; // Adjacency matrix
       relationMatrix = new int[MAX_VERTS][MAX_VERTS];
       numberOfVertices = 0;
       numberOfVerticesInTree = 0;
       for (int i = 0; i < MAX_VERTS; i++) { // Fill the adjacency matrix
           for (int k = 0; k < MAX_VERTS; k++) { // with "infinity"
               relationMatrix[i][k] = INFINITY; // Assign default values
               shortestPaths = new ArrayList<>(); // Assign an empty list
           }
       }
   }

   public void addVertex(char lab) {// Assign new vertices
       vertexList[numberOfVertices++] = new Vertex(lab);
   }

   public void addEdge(int start, int end, int weight) {
       relationMatrix[start][end] = weight; // Set weighted edges between vertices
   }

   public void path() { // Choose the shortest path
       // Set the initial vertex data
       int startTree = 0; // Start from vertex 0
       vertexList[startTree].setInTree(true); // Include the first element in the tree
       numberOfVerticesInTree = 1;

       // Fill out the shortest paths for vertices adjacent to the initial vertex
       for (int i = 0; i < numberOfVertices; i++) {
           int tempDist = relationMatrix[startTree][i];
           Path path = new Path(tempDist);
           path.getParentVertices().add(0);// The starting vertex will always be a parent vertex
           shortestPaths.add(path);
       }
       // Until every vertex is in the tree
       while (numberOfVerticesInTree < numberOfVertices) { // Do this until the number of of vertices in the tree equals the total number of vertices
           int indexMin = getMin();// Get the index of the of the vertex with the smallest distance from the vertices not yet in the tree
           int minDist = shortestPaths.get(indexMin).getDistance(); // Minimum distance to the vertices not yet in the tree

           if (minDist == INFINITY) {
               System.out.println("The graph has an unreachable vertex");
               break; // If only unreachable vertices have not been visited, then we exit the loop
           } else {
               currentVertex = indexMin; // Set currentVert to the index of the current vertex
               startToCurrent = shortestPaths.get(indexMin).getDistance(); // Set the distance to the current vertex
           }

           vertexList[currentVertex].setInTree(true);  // Add the current vertex to the tree
           numberOfVerticesInTree++; // Increase the count of vertices in the tree
           updateShortestPaths(); // Update the list of shortest paths
       }

       displayPaths(); // Display the results on the console
   }

   public void clear() { // Clear the tree
       numberOfVerticesInTree = 0;
       for (int i = 0; i < numberOfVertices; i++) {
           vertexList[i].setInTree(false);
       }
   }

   private int getMin() {
       int minDist = INFINITY; // The distance of the initial shortest path is taken to be infinite
       int indexMin = 0;
       for (int i = 1; i < numberOfVertices; i++) { // For each vertex
           if (!vertexList[i].isInTree() && shortestPaths.get(i).getDistance() < minDist) { // If the vertex is not yet in the tree and the distance to the vertex is less than the current minimum
               minDist = shortestPaths.get(i).getDistance(); // then update the minimum
               indexMin = i; // Update the index of the vertex with the minimum distance
           }
       }
       return indexMin; // Returns the index of the vertex with the smallest distance among those not yet in the tree
   }

   private void updateShortestPaths() {
       int vertexIndex = 1; // The initial vertex is skipped
       while (vertexIndex < numberOfVertices) { // Run over the columns

           if (vertexList[vertexIndex].isInTree()) { // If the column vertex is already in the tree, then we skip it
               vertexIndex++;
               continue;
           }
           // Calculate the distance for one element sPath
           // Get the edge from currentVert to column
           int currentToFringe = relationMatrix[currentVertex][vertexIndex];
           // Add up all the distances
           int startToFringe = startToCurrent + currentToFringe;
           // Determine the distance to the current vertexIndex
           int shortPathDistance = shortestPaths.get(vertexIndex).getDistance();

           // Compare the distance through currentVertex with the current distance in the vertex with index vertexIndex
           if (startToFringe < shortPathDistance) { // If it is smaller, then the vertex at vertexIndex is assigned the new shortest path
               List newParents = new ArrayList<>(shortestPaths.get(currentVertex).getParentVertices()); // Create a copy of the list of vertices of vertex currentVert's parents
               newParents.add(currentVertex); // And add currentVertex to it as the previous vertex
               shortestPaths.get(vertexIndex).setParentVertices(newParents); // Save the new path
               shortestPaths.get(vertexIndex).setDistance(startToFringe); // Save the new distance
           }
           vertexIndex++;
       }
   }

   private void displayPaths() { // A method for displaying the shortest paths on the screen
       for (int i = 0; i < numberOfVertices; i++) {
           System.out.print(vertexList[i].getLabel() + " = ");
           if (shortestPaths.get(i).getDistance() == INFINITY) {
               System.out.println("0");
           } else {
               String result = shortestPaths.get(i).getDistance() + " (";
               List parents = shortestPaths.get(i).getParentVertices();
               for (int j = 0; j < parents.size(); j++) {
                   result += vertexList[parents.get(j)].getLabel() + " -> ";
               }
               System.out.println(result + vertexList[i].getLabel() + ")");
           }
       }
   }
}
āļ™āļąāđˆāļ™āļ„āļ·āļ­āļ„āļ§āļēāļĄāļĄāļŦāļąāļĻāļˆāļĢāļĢāļĒāđŒāļ—āļąāđ‰āļ‡āļŦāļĄāļ” =) āļ•āļ­āļ™āļ™āļĩāđ‰āđ€āļĢāļēāļĄāļēāļ”āļđāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ‚āļ­āļ‡āļ­āļąāļĨāļāļ­āļĢāļīāļ—āļķāļĄāļ™āļĩāđ‰āļāļąāļ™:
public class Solution {

   public static void main(String[] args) {
       Graph graph = new Graph();
       graph.addVertex('A');
       graph.addVertex('B');
       graph.addVertex('C');
       graph.addVertex('D');
       graph.addVertex('E');
       graph.addVertex('F');
       graph.addVertex('G');

       graph.addEdge(0, 1, 3);
       graph.addEdge(0, 2, 5);
       graph.addEdge(0, 3, 7);
       graph.addEdge(1, 4, 6);
       graph.addEdge(2, 4, 4);
       graph.addEdge(2, 3, 3);
       graph.addEdge(3, 5, 3);
       graph.addEdge(4, 6, 6);
       graph.addEdge(5, 6, 4);

       System.out.println("The following nodes form the shortest paths from node A:");
       graph.path();
       graph.clear();
   }
}
āđāļĨāļ°āđ€āļ­āļēāļ•āđŒāļžāļļāļ•āļ„āļ­āļ™āđ‚āļ‹āļĨāļ„āļ·āļ­:
āđ‚āļŦāļ™āļ”āļ•āđˆāļ­āđ„āļ›āļ™āļĩāđ‰āļŠāļĢāđ‰āļēāļ‡āđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļ—āļĩāđˆāļŠāļąāđ‰āļ™āļ—āļĩāđˆāļŠāļļāļ”āļˆāļēāļāđ‚āļŦāļ™āļ” A: A = 0 B = 3 (A -> B) C = 5 (A -> C) D = 7 (A -> D) E = 9 (A -> B - > āļˆ) F = 10 (A -> D -> F) G = 14 (A -> D -> F -> G)
āļ„āļ§āļēāļĄāļ‹āļąāļšāļ‹āđ‰āļ­āļ™āļ‚āļ­āļ‡āđ€āļ§āļĨāļēāļ‚āļ­āļ‡āļ­āļąāļĨāļāļ­āļĢāļīāļ˜āļķāļĄāļ™āļĩāđ‰āđ„āļĄāđˆāđƒāļŠāđˆāđƒāļ„āļĢāļ­āļ·āđˆāļ™āļ™āļ­āļāļˆāļēāļ O(NÂē) āđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļāđ€āļĢāļēāļĄāļĩāļĨāļđāļ›āļ—āļĩāđˆāļ‹āđ‰āļ­āļ™āļāļąāļ™ āļ™āļąāđˆāļ™āļ„āļ·āļ­āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļ—āļĩāđˆāļ‰āļąāļ™āļĄāļĩāļ§āļąāļ™āļ™āļĩāđ‰ āļ‚āļ­āļšāļ„āļļāļ“āļŠāļģāļŦāļĢāļąāļšāļ„āļ§āļēāļĄāļŠāļ™āđƒāļˆ!āļ„āļģāļ–āļēāļĄ & āļ„āļģāļ•āļ­āļšāļˆāļēāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™: āļ­āļąāļĨāļāļ­āļĢāļīāļ˜āļķāļĄāđƒāļ™ Java āļ•āļ­āļ™āļ—āļĩāđˆ 2 - 10
āļ„āļ§āļēāļĄāļ„āļīāļ”āđ€āļŦāđ‡āļ™
  • āđ€āļ›āđ‡āļ™āļ—āļĩāđˆāļ™āļīāļĒāļĄ
  • āđƒāļŦāļĄāđˆ
  • āđ€āļāđˆāļē
āļ„āļļāļ“āļ•āđ‰āļ­āļ‡āļĨāļ‡āļŠāļ·āđˆāļ­āđ€āļ‚āđ‰āļēāđƒāļŠāđ‰āđ€āļžāļ·āđˆāļ­āđāļŠāļ”āļ‡āļ„āļ§āļēāļĄāļ„āļīāļ”āđ€āļŦāđ‡āļ™
āļŦāļ™āđ‰āļēāļ™āļĩāđ‰āļĒāļąāļ‡āđ„āļĄāđˆāļĄāļĩāļ„āļ§āļēāļĄāļ„āļīāļ”āđ€āļŦāđ‡āļ™āđƒāļ” āđ†