You are on page 1of 64

‫ﺑﻪ ﻧﺎم داﻧﺎﺗﺮﯾﻦ‬

‫دورهی ﺧﻼﻗﯿﺖ اﻟﮕﻮرﯾﺘﻤﯽ و ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﯽ ﭘﺎﯾﺘﻮن‬

‫ِﺑﺒ‪ :+‬اﺳﺘﺎراتپ ﺑﱪا!!‬

‫داﻧﺸﮑﺪهی ﻣﻬﻨﺪﺳﯽ ﮐﺎﻣﭙﯿﻮﺗﺮ داﻧﺸﮕﺎه ﺻﻨﻌﺘﯽ ﺷﺮﯾﻒ‬


‫ﺗﺎﺑﺴﺘﺎن ‪۱۴۰۲‬‬
‫ﺑﺒﺮاسﻫﺎ ﯾﮏ اﺳﺘﺎرﺗﺎپ ﺗﺎﮐﺴﯽ اﯾﻨﺘﺮﻧﺘﯽ زدهاﻧﺪ‪ :‬ﺑﺒﺴﯽ‬

‫ﺑﺒﺴﯽ‬

‫ﺑﺒﺴﯽ ﭘﻼس‬

‫ﻣﻮﺗﻮﺑﺒﺴﯽ‬
‫اﻣﺎ ﻧﻤﯽداﻧﻨﺪ ﭼﻄﻮر ﺑﯿﻦ ﻣﺒﺪا و ﻣﻘﺼﺪ ﺳﻔﺮ‪ ،‬ﮐﻮﺗﺎهﺗﺮﯾﻦ ﻣﺴﯿﺮ را ﭘﯿﺪا ﮐﻨﻨﺪ‪.‬‬

‫ﺑﺒﺴﯽ‬

‫ﺑﺒﺴﯽ ﭘﻼس‬

‫ﻣﻮﺗﻮﺑﺒﺴﯽ‬
‫اﭘﻠﯿﮑﯿﺸﻦﻫﺎی ﻣﺴﯿﺮﯾﺎﺑﯽ ﭼﮕﻮﻧﻪ ﺳﺮﯾﻊﺗﺮﯾﻦ ﻣﺴﯿﺮ را ﭘﯿﺪا ﻣﯽﮐﻨﻨﺪ؟‬
‫ﻣﻮﺗﻮر ﺟﺴﺘﺠﻮی ﮔﻮﮔﻞ ﭼﻄﻮر ﻣﺮﺗﺒﻂﺗﺮﯾﻦ ﺻﻔﺤﺎت را ﭘﯿﺪا ﻣﯽﮐﻨﺪ؟‬
‫ﺷﺒﮑﻪﻫﺎی اﺟﺘﻤﺎﻋﯽ ﭼﻄﻮر ﺷﻤﺎ را از ﭘﺴﺖﻫﺎی دوﺳﺘﺎﻧﺘﺎن ﻣﻄﻠﻊ ﻣﯽﮐﻨﻨﺪ؟‬
‫راهﺣﻞ ﻫﻤﻪی اﯾﻦ ﻣﺴﺎﻟﻪﻫﺎ اﯾﻦ اﺳﺖ‪ :‬ﻧﻈﺮﯾﻪی ﮔﺮاف ‪(:‬‬
‫ﮔﺮاف‬ ‫ﺖ‬

‫ﺮاف ﻣﯽﺗﻮاﻧﻨﺪ ﺑﺪونﺟﻬﺖ ﯾﺎ‬


‫ﺪ‪.‬‬
‫دﺳﺖدادن اﻓﺮاد در ﯾﮏ‬
‫ﺎنﻫﺎی دوﻃﺮﻓﻪی ﺷﻬﺮ‪،‬‬
‫ﻬﺖ ﻫﺴﺘﻨﺪ‪.‬‬

‫‪8‬‬
‫ﮔﺮاف‬ ‫ﺖ‬

‫راس‬ ‫ﺮاف ﻣﯽﺗﻮاﻧﻨﺪ ﺑﺪونﺟﻬﺖ ﯾﺎ‬


‫راس‬
‫ﺪ‪.‬‬
‫دﺳﺖدادن اﻓﺮاد در ﯾﮏ‬
‫راس‬ ‫ﺎنﻫﺎی دوﻃﺮﻓﻪی ﺷﻬﺮ‪،‬‬
‫راس‬
‫ﻬﺖ ﻫﺴﺘﻨﺪ‪.‬‬
‫راس‬

‫راس‬
‫راس‬
‫‪8‬‬
‫ﮔﺮاف‬ ‫ﺖ‬

‫ﺮاف ﻣﯽﺗﻮاﻧﻨﺪ ﺑﺪونﺟﻬﺖ ﯾﺎ‬


‫ﯾﺎل‬
‫ﺪ‪.‬‬
‫ﯾﺎل‬ ‫ﯾﺎل‬ ‫دﺳﺖدادن اﻓﺮاد در ﯾﮏ‬
‫ﯾﺎل‬ ‫ﺎنﻫﺎی دوﻃﺮﻓﻪی ﺷﻬﺮ‪،‬‬
‫ﯾﺎل‬ ‫ﻬﺖ ﻫﺴﺘﻨﺪ‪.‬‬
‫ﯾﺎل‬ ‫ﯾﺎل‬
‫ﯾﺎل‬
‫ﯾﺎل‬

‫‪8‬‬
‫ﮔﺮاف ﺑﺪونﺟﻬﺖ و ﺟﻬﺖدار‬
‫ﮔﺮاف ﺟﻬﺖدار‬

‫• اﻣﺎ در ﮔﺮاف دﻧﺒﺎلﮐﺮدن در ﺷﺒﮑﻪﻫﺎی‬ ‫نﺟﻬﺖ ﯾﺎ‬


‫اﺟﺘﻤﺎﻋﯽ ﯾﺎ ﺷﻬﺮی ﮐﻪ ﺧﯿﺎﺑﺎنﻫﺎی آن‬
‫ﯾﮏﻃﺮﻓﻪ اﺳﺖ‪ ،‬ﯾﺎلﻫﺎ ﺟﻬﺖدار ﻫﺴﺘﻨﺪ‪.‬‬
‫در ﯾﮏ‬
‫ﺷﻬﺮ‪،‬‬

‫‪9‬‬
‫‪8‬‬
‫درﺟﻪی راس‪ :‬ﺗﻌﺪاد ﯾﺎلﻫﺎی ﻣﺘﺼﻞ ﺑﻪ ﻫﺮ راس‬
‫ﯽﺗﻮاﻧﻨﺪ ﺑﺪونﺟﻬﺖ ﯾﺎ‬

‫دادن اﻓﺮاد در ﯾﮏ‬


‫ی دوﻃﺮﻓﻪی ﺷﻬﺮ‪،‬‬
‫ﺴﺘﻨﺪ‪.‬‬

‫‪8‬‬
‫درﺟﻪی راس‪ :‬ﺗﻌﺪاد ﯾﺎلﻫﺎی ﻣﺘﺼﻞ ﺑﻪ ﻫﺮ راس‬
‫‪۲‬‬ ‫ﯽﺗﻮاﻧﻨﺪ ﺑﺪونﺟﻬﺖ ﯾﺎ‬
‫‪۲‬‬
‫دادن اﻓﺮاد در ﯾﮏ‬
‫ی دوﻃﺮﻓﻪی ﺷﻬﺮ‪،‬‬
‫‪۱‬‬ ‫‪۶‬‬
‫ﺴﺘﻨﺪ‪.‬‬
‫‪۲‬‬

‫‪۲‬‬

‫‪۳‬‬
‫‪8‬‬
‫ﻟﻢ دﺳﺖدادن‬

‫ﺳــﻮال‪ :‬در ﯾﮏ ﻣــﻬﻤﺎﻧﯽ‪ ،‬ﻫــﺮ ﻓــﺮد ﺗــﻌﺪاد اﻓــﺮادی ﮐﻪ ﺑــﺎ آنﻫــﺎ دﺳــﺖ داده را روی‬
‫‪٢‬‬ ‫ﺗﺨﺘﻪﺳﯿﺎه ﻣﯽﻧﻮﯾﺴﺪ‪ .‬ﺛﺎﺑﺖ ﮐﻨﯿﺪ ﺟﻤﻊ اﻋﺪاد روی ﺗﺨﺘﻪ‪ ،‬زوج اﺳﺖ‪.‬‬

‫‪٣‬‬

‫‪٢‬‬
‫ﻟﻢ دﺳﺖدادن‬

‫ﺳــﻮال‪ :‬در ﯾﮏ ﻣــﻬﻤﺎﻧﯽ‪ ،‬ﻫــﺮ ﻓــﺮد ﺗــﻌﺪاد اﻓــﺮادی ﮐﻪ ﺑــﺎ آنﻫــﺎ دﺳــﺖ داده را روی‬
‫‪٢‬‬ ‫ﺗﺨﺘﻪﺳﯿﺎه ﻣﯽﻧﻮﯾﺴﺪ‪ .‬ﺛﺎﺑﺖ ﮐﻨﯿﺪ ﺟﻤﻊ اﻋﺪاد روی ﺗﺨﺘﻪ‪ ،‬زوج اﺳﺖ‪.‬‬

‫‪٣‬‬ ‫ﭘﺎﺳﺦ‪:‬‬
‫• ﻫﺮ ﻣﻬﻤﺎن‪ :‬ﯾﮏ راس‬

‫‪٢‬‬
‫ﻟﻢ دﺳﺖدادن‬

‫ﺳــﻮال‪ :‬در ﯾﮏ ﻣــﻬﻤﺎﻧﯽ‪ ،‬ﻫــﺮ ﻓــﺮد ﺗــﻌﺪاد اﻓــﺮادی ﮐﻪ ﺑــﺎ آنﻫــﺎ دﺳــﺖ داده را روی‬
‫‪٢‬‬ ‫ﺗﺨﺘﻪﺳﯿﺎه ﻣﯽﻧﻮﯾﺴﺪ‪ .‬ﺛﺎﺑﺖ ﮐﻨﯿﺪ ﺟﻤﻊ اﻋﺪاد روی ﺗﺨﺘﻪ‪ ،‬زوج اﺳﺖ‪.‬‬

‫‪٣‬‬ ‫ﭘﺎﺳﺦ‪:‬‬
‫• ﻫﺮ ﻣﻬﻤﺎن‪ :‬ﯾﮏ راس‬
‫• دﺳﺖدادن دو ﻧﻔﺮ‪ :‬ﯾﮏ ﯾﺎل ﺑﯿﻦ آنﻫﺎ‬
‫‪٢‬‬
‫ﻟﻢ دﺳﺖدادن‬

‫ﺳــﻮال‪ :‬در ﯾﮏ ﻣــﻬﻤﺎﻧﯽ‪ ،‬ﻫــﺮ ﻓــﺮد ﺗــﻌﺪاد اﻓــﺮادی ﮐﻪ ﺑــﺎ آنﻫــﺎ دﺳــﺖ داده را روی‬
‫‪٢‬‬ ‫ﺗﺨﺘﻪﺳﯿﺎه ﻣﯽﻧﻮﯾﺴﺪ‪ .‬ﺛﺎﺑﺖ ﮐﻨﯿﺪ ﺟﻤﻊ اﻋﺪاد روی ﺗﺨﺘﻪ‪ ،‬زوج اﺳﺖ‪.‬‬

‫‪٣‬‬ ‫ﭘﺎﺳﺦ‪:‬‬
‫• ﻫﺮ ﻣﻬﻤﺎن‪ :‬ﯾﮏ راس‬
‫• دﺳﺖدادن دو ﻧﻔﺮ‪ :‬ﯾﮏ ﯾﺎل ﺑﯿﻦ آنﻫﺎ‬
‫‪٢‬‬
‫• اﻋﺪاد ﻧﻮﺷﺘﻪ ﺷﺪه‪ :‬درﺟﻪی راسﻫﺎ‬
‫ﻟﻢ دﺳﺖدادن‬

‫ﺳــﻮال‪ :‬در ﯾﮏ ﻣــﻬﻤﺎﻧﯽ‪ ،‬ﻫــﺮ ﻓــﺮد ﺗــﻌﺪاد اﻓــﺮادی ﮐﻪ ﺑــﺎ آنﻫــﺎ دﺳــﺖ داده را روی‬
‫‪٢‬‬ ‫ﺗﺨﺘﻪﺳﯿﺎه ﻣﯽﻧﻮﯾﺴﺪ‪ .‬ﺛﺎﺑﺖ ﮐﻨﯿﺪ ﺟﻤﻊ اﻋﺪاد روی ﺗﺨﺘﻪ‪ ،‬زوج اﺳﺖ‪.‬‬

‫‪٣‬‬ ‫ﭘﺎﺳﺦ‪:‬‬
‫• ﻫﺮ ﻣﻬﻤﺎن‪ :‬ﯾﮏ راس‬
‫• دﺳﺖدادن دو ﻧﻔﺮ‪ :‬ﯾﮏ ﯾﺎل ﺑﯿﻦ آنﻫﺎ‬
‫‪٢‬‬
‫• اﻋﺪاد ﻧﻮﺷﺘﻪ ﺷﺪه‪ :‬درﺟﻪی راسﻫﺎ‬
‫• ﻣﺠﻤﻮع اﻋﺪاد زوج اﺳﺖ ﭼﺮا ﮐﻪ ﻣﺠﻤﻮع درﺟﻪی راسﻫﺎ ﺑﺮاﺑﺮ اﺳﺖ ﺑﺎ دو ﺑﺮاﺑﺮ‬
‫ﺗﻌﺪاد ﯾﺎلﻫﺎ‬
‫ﺧﯿﻠﯽ از ﻣﻌﻤﺎﻫﺎ ﺑﺎ ﻧﻈﺮﯾﻪی ﮔﺮاف ﺣﻞ ﻣﯽﺷﻮﻧﺪ‬

‫ﺑــﺪون آنﮐﻪ ﻣــﺪاد را از روی ﮐﺎﻏــﺬ ﺑــﺮدارﯾﺪ ﯾﺎ از روی ﯾﮏ ﭘــﺎرهﺧــﻂ دوﺑــﺎر رد ﺷــﻮﯾﺪ‪،‬‬
‫‪٢‬‬
‫ﺷﮑﻞ را ﺑﮑﺸﯿﺪ‪.‬‬

‫‪٣‬‬

‫‪٢‬‬
‫ﺷﮑﻞ را ﺑﻪ ﮔﺮاف ﺗﺒﺪﯾﻞ ﮐﻨﯿﻢ‬

‫‪٢‬‬

‫‪٣‬‬

‫‪٢‬‬
‫ﻓﺮض ﮐﻨﯿﺪ ﺗﺎ ﺟﺎﯾﯽ از ﺷﮑﻞ را رﺳﻢ ﮐﺮدهاﯾﻢ‬

‫‪٢‬‬

‫‪٣‬‬

‫‪٢‬‬
‫درﺟﻪی ﻫﺮ راس ﭼﻨﺪ اﺳﺖ؟‬

‫‪٢‬‬

‫‪٣‬‬

‫‪٢‬‬
‫درﺟﻪی ﻫﺮ راس ﭼﻨﺪ اﺳﺖ؟‬

‫‪٢‬‬

‫‪٣‬‬ ‫‪۲‬‬ ‫‪۲‬‬

‫‪٢‬‬

‫‪۱‬‬

‫‪۱‬‬
‫ﻗﺴﻤﺖ ﺑﯿﺸﺘﺮی از ﺷﮑﻞ را رﺳﻢ ﻣﯽﮐﻨﯿﻢ‪.‬‬

‫‪٢‬‬

‫‪٣‬‬

‫‪٢‬‬
‫ﺣﺎﻻ درﺟﻪی ﻫﺮ راس ﭼﻨﺪ اﺳﺖ؟‬

‫‪٢‬‬

‫‪٣‬‬

‫‪٢‬‬
‫ﺣﺎﻻ درﺟﻪی ﻫﺮ راس ﭼﻨﺪ اﺳﺖ؟‬

‫‪٢‬‬

‫‪٣‬‬ ‫‪۲‬‬ ‫‪۲‬‬

‫‪٢‬‬

‫‪۳‬‬

‫‪۱‬‬ ‫‪۲‬‬
‫ﺑﻪ ﺟﺰ راس اﺑﺘﺪا و اﻧﺘﻬﺎی ﻣﺴﯿﺮ‪ ،‬درﺟﻪی ﺳﺎﯾﺮ راسﻫﺎ ﭼﻪ وﺿﻌﯽ دارد؟‬

‫‪٢‬‬

‫‪٣‬‬ ‫‪۲‬‬ ‫‪۲‬‬

‫‪٢‬‬

‫‪۳‬‬

‫‪۱‬‬ ‫‪۲‬‬
‫ﮐﺸﯿﺪن ﺷﮑﻞ ﺑﺪون ﺑﺮداﺷﺘﻦ ﻣﺪاد از روی ﮐﺎﻏﺬ‬

‫ﺑﻪ ﺟﺰ راس ﺷﺮوع و ﭘﺎﯾﺎن‪ ،‬ﻫﺮ ﺑﺎر ﺑﻪ ﯾﮏ راس وارد ﻣﯽﺷﻮﯾﻢ‪ ،‬از ﻫﻤﺎن راس‬
‫‪٢‬‬ ‫ﺧﺎرج ﻣﯽﺷﻮﯾﻢ‪ .‬ﭘﺲ ﺑﻪ ﺟﺰ راس ﺷﺮوع و ﭘﺎﯾﺎن‪ ،‬درﺟﻪی ﺳﺎﯾﺮ راسﻫﺎ زوج اﺳﺖ‪.‬‬

‫‪٣‬‬

‫‪٢‬‬
‫ﮐﺸﯿﺪن ﺷﮑﻞ ﺑﺪون ﺑﺮداﺷﺘﻦ ﻣﺪاد از روی ﮐﺎﻏﺬ‬

‫ﺑﻪ ﺟﺰ راس ﺷﺮوع و ﭘﺎﯾﺎن‪ ،‬ﻫﺮ ﺑﺎر ﺑﻪ ﯾﮏ راس وارد ﻣﯽﺷﻮﯾﻢ‪ ،‬از ﻫﻤﺎن راس‬
‫‪٢‬‬ ‫ﺧﺎرج ﻣﯽﺷﻮﯾﻢ‪ .‬ﭘﺲ ﺑﻪ ﺟﺰ راس ﺷﺮوع و ﭘﺎﯾﺎن‪ ،‬درﺟﻪی ﺳﺎﯾﺮ راسﻫﺎ زوج اﺳﺖ‪.‬‬

‫‪٣‬‬

‫ﭘﺲ ﻣﺎ ﺑﺪون ﺑﺮداﺷﺘﻦ ﻣﺪاد از روی ﮐﺎﻏﺬ ﯾﺎ ﮐﺸﯿﺪن دوﺑﺎرهی ﯾﮏ ﭘﺎرهﺧﻂ‪ ،‬ﻗﺎدر‬
‫ﺑﻪ رﺳﻢ ﺷﮑﻞﻫﺎﯾﯽ ﻫﺴﺘﯿﻢ ﮐﻪ درﺟﻪی ﻫﻤﻪی راسﻫﺎ زوج ﺑﺎﺷﺪ‪ ،‬ﯾﺎ درﺟﻪی‬
‫‪٢‬‬ ‫ﺣﺪاﮐﺜﺮ دو راس ﻓﺮد و ﺳﺎﯾﺮ راسﻫﺎ زوج ﺑﺎﺷﺪ‪.‬‬
‫آﯾﺎ ﻣﯽﺗﻮاﻧﯿﻢ اﯾﻦ ﺷﮑﻞ را ﺑﺪون ﺑﺮداﺷﺘﻦ ﻣﺪاد از ﮐﺎﻏﺬ رﺳﻢ ﮐﻨﯿﻢ؟‬

‫‪٢‬‬

‫‪٣‬‬

‫‪٢‬‬
‫وﻗﺖ ﮐﺪزدن ‪(:‬‬
‫ﻣﺴﯿﺮﯾﺎﺑﯽ‬

‫• ﻓﺮض ﮐﻨﯿﺪ ﺑﺨﻮاﻫﯿﻢ ﺷﻬﺮ را ﺑﺮای ﻧﻮﺷﺘﻦ ﯾﮏ‬


‫اﭘﻠﯿﮑﯿﺸﻦ ﻣﺴﯿﺮﯾﺎﺑﯽ ﻣﺪلﺳﺎزی ﮐﻨﯿﻢ‪.‬‬
‫• ﻣﯽﺗﻮاﻧﯿﻢ ﻫﺮ ﺗﻘﺎﻃﻊ را ﯾﮏ راس از ﯾﮏ ﮔﺮاف در‬
‫ﻧﻈﺮ ﺑﮕﯿﺮﯾﻢ‪.‬‬
‫• ﻫﻤﭽﻨﯿﻦ ﻫﺮ ﺧﯿﺎﺑﺎن را ﺑﺎ ﯾﮏ ﯾﺎل ﻣﺪل ﮐﻨﯿﻢ‪.‬‬
‫ﻣﺴﯿﺮﯾﺎﺑﯽ‬

‫• ﺣﺎل ﻓﺮض ﮐﻨﯿﺪ ﺑﺨﻮاﻫﯿﻢ از ﺗﻘﺎﻃﻊ ‪ V‬ﺑﻪ ‪U‬‬


‫ﺑﻬﺘﺮﯾﻦ ﻣﺴﯿﺮ را ﭘﯿﺪا ﮐﻨﯿﻢ‪.‬‬
‫• ﻣﺴﯿﺮ دﻧﺒﺎﻟﻪای از راسﻫﺎی ﻏﯿﺮﺗﮑﺮاری اﺳﺖ ﮐﻪ‬
‫ﻫﺮ دو راس ﻣﺘﻮاﻟﯽ در آن ﺑﺎ ﯾﺎل ﻣﺘﺼﻞ ﺑﺎﺷﻨﺪ‪.‬‬
‫‪U‬‬

‫‪V‬‬
‫ﻣﺴﯿﺮﯾﺎﺑﯽ‬

‫• ﺣﺎل ﻓﺮض ﮐﻨﯿﺪ ﺑﺨﻮاﻫﯿﻢ از ﺗﻘﺎﻃﻊ ‪ V‬ﺑﻪ ‪U‬‬


‫ﺑﻬﺘﺮﯾﻦ ﻣﺴﯿﺮ را ﭘﯿﺪا ﮐﻨﯿﻢ‪.‬‬
‫• ﻣﺴﯿﺮ دﻧﺒﺎﻟﻪای از راسﻫﺎی ﻏﯿﺮﺗﮑﺮاری اﺳﺖ ﮐﻪ‬
‫ﻫﺮ دو راس ﻣﺘﻮاﻟﯽ در آن ﺑﺎ ﯾﺎل ﻣﺘﺼﻞ ﺑﺎﺷﻨﺪ‪.‬‬
‫‪U‬‬

‫• روش اول‪ :‬ﻣﺴﯿﺮی را از ‪ U‬ﺑﻪ ‪ V‬ﭘﯿﺪا ﮐﻨﯿﻢ ﮐﻪ‬


‫‪V‬‬
‫ﮐﻢﺗﺮﯾﻦ ﺗﻌﺪاد ﯾﺎل را داﺷﺘﻪ ﺑﺎﺷﺪ‪.‬‬
‫• ﭼﺎﻟﺶ‪ :‬اﯾﻦ روش‪ ،‬ﻣﺴﺎﻓﺖ ﺧﯿﺎﺑﺎنﻫﺎ را در ﻧﻈﺮ‬
‫ﻧﻤﯽﮔﯿﺮد‪.‬‬
‫اﻟﮕﻮرﯾﺘﻢ ﻣﺴﯿﺮﯾﺎﺑﯽ‬

‫‪U‬‬

‫‪V‬‬
‫اﻟﮕﻮرﯾﺘﻢ ﻣﺴﯿﺮﯾﺎﺑﯽ‬

‫‪۰‬‬
‫‪U‬‬

‫‪V‬‬
‫اﻟﮕﻮرﯾﺘﻢ ﻣﺴﯿﺮﯾﺎﺑﯽ‬

‫‪۰‬‬
‫‪U‬‬

‫‪V‬‬
‫اﻟﮕﻮرﯾﺘﻢ ﻣﺴﯿﺮﯾﺎﺑﯽ‬

‫‪۱‬‬

‫‪۱‬‬ ‫‪۰‬‬ ‫‪۱‬‬


‫‪U‬‬

‫‪۱‬‬
‫‪V‬‬
‫اﻟﮕﻮرﯾﺘﻢ ﻣﺴﯿﺮﯾﺎﺑﯽ‬

‫‪۱‬‬

‫‪۱‬‬ ‫‪۰‬‬ ‫‪۱‬‬


‫‪U‬‬

‫‪۱‬‬
‫‪V‬‬
‫اﻟﮕﻮرﯾﺘﻢ ﻣﺴﯿﺮﯾﺎﺑﯽ‬

‫‪۱‬‬ ‫‪۲‬‬

‫‪۲‬‬

‫‪۱‬‬ ‫‪۰‬‬ ‫‪۱‬‬ ‫‪۲‬‬


‫‪U‬‬

‫‪۱‬‬
‫‪۲‬‬ ‫‪۲‬‬ ‫‪V‬‬

‫‪۲‬‬
‫اﻟﮕﻮرﯾﺘﻢ ﻣﺴﯿﺮﯾﺎﺑﯽ‬

‫‪۱‬‬ ‫‪۲‬‬

‫‪۲‬‬

‫‪۱‬‬ ‫‪۰‬‬ ‫‪۱‬‬ ‫‪۲‬‬


‫‪U‬‬

‫‪۱‬‬
‫‪۲‬‬ ‫‪۲‬‬ ‫‪V‬‬

‫‪۲‬‬
‫اﻟﮕﻮرﯾﺘﻢ ﻣﺴﯿﺮﯾﺎﺑﯽ‬
‫‪۲‬‬ ‫‪۳‬‬
‫‪۱‬‬
‫‪۲‬‬

‫‪۱‬‬ ‫‪۰‬‬ ‫‪۱‬‬ ‫‪۲‬‬


‫‪U‬‬ ‫‪۳‬‬

‫‪۱‬‬
‫‪۲‬‬ ‫‪۲‬‬ ‫‪V‬‬

‫‪۲‬‬
‫‪۳‬‬

‫‪۳‬‬
‫اﻟﮕﻮرﯾﺘﻢ ﻣﺴﯿﺮﯾﺎﺑﯽ‬
‫‪۲‬‬ ‫‪۳‬‬
‫‪۱‬‬
‫‪۲‬‬

‫‪۱‬‬ ‫‪۰‬‬ ‫‪۱‬‬ ‫‪۲‬‬


‫‪U‬‬ ‫‪۳‬‬

‫‪۱‬‬
‫‪۲‬‬ ‫‪۲‬‬ ‫‪V‬‬

‫‪۲‬‬
‫‪۳‬‬

‫‪۳‬‬
‫اﻟﮕﻮرﯾﺘﻢ ﻣﺴﯿﺮﯾﺎﺑﯽ‬
‫‪۲‬‬ ‫‪۳‬‬
‫‪۱‬‬
‫‪۲‬‬
‫‪۴‬‬

‫‪۱‬‬ ‫‪۰‬‬ ‫‪۱‬‬ ‫‪۲‬‬


‫‪U‬‬ ‫‪۳‬‬
‫‪۴‬‬

‫‪۱‬‬
‫‪۲‬‬ ‫‪۲‬‬ ‫‪V‬‬ ‫‪۴‬‬
‫‪۲‬‬
‫‪۳‬‬

‫‪۳‬‬
‫اﻟﮕﻮرﯾﺘﻢ ﻣﺴﯿﺮﯾﺎﺑﯽ‬
‫‪۲‬‬ ‫‪۳‬‬
‫‪۱‬‬
‫‪۲‬‬
‫‪۴‬‬

‫‪۱‬‬ ‫‪۰‬‬ ‫‪۱‬‬ ‫‪۲‬‬


‫‪U‬‬ ‫‪۳‬‬
‫‪۴‬‬

‫‪۱‬‬
‫‪۲‬‬ ‫‪۲‬‬ ‫‪V‬‬ ‫‪۴‬‬
‫‪۲‬‬
‫‪۳‬‬

‫‪۳‬‬
‫اﻟﮕﻮرﯾﺘﻢ ﻣﺴﯿﺮﯾﺎﺑﯽ‬
‫‪۲‬‬ ‫‪۳‬‬
‫‪۱‬‬
‫‪۲‬‬
‫‪۴‬‬

‫‪۱‬‬ ‫‪۰‬‬ ‫‪۱‬‬ ‫‪۲‬‬ ‫‪۵‬‬


‫‪U‬‬ ‫‪۳‬‬
‫‪۴‬‬

‫‪۱‬‬
‫‪۲‬‬ ‫‪۲‬‬ ‫‪V‬‬ ‫‪۴‬‬
‫‪۲‬‬
‫‪۳‬‬

‫‪۳‬‬
‫اﻟﮕﻮرﯾﺘﻢ ﺟﺴﺘﺠﻮی ﺳﻄﺢ اول )‪(BFS‬‬

‫• راس ﺷﺮوع ‪ s‬را داﺧﻞ ﯾﮏ ﺻﻒ ﺑﮕﺬار‬


‫• ﻓﺎﺻﻠﻪی راس ﺷﺮوع ﺗﺎ ﺧﻮدش را ﺻﻔﺮ ﮐﻦ ‪d[s]=0‬‬
‫• راس ﺷﺮوع را ﻋﻼﻣﺖ ﺑﺰن‬
‫• ﺗﺎ وﻗﺘﯽ ﺻﻒ ﺧﺎﻟﯽ ﻧﯿﺴﺖ‪:‬‬
‫راس اول ﺻﻒ را ﺑﺮدار و آن را در ‪ u‬ﺑﺮﯾﺰ‬
‫ﺑﺮای ﻫﻤﻪی ﻫﻤﺴﺎﯾﻪﻫﺎی ‪ u‬ﻣﺜﻞ ‪ v‬اﻧﺠﺎم ﺑﺪه‪:‬‬
‫اﮔﺮ ‪ v‬ﻋﻼﻣﺖ ﻧﺨﻮردهاﺳﺖ‪:‬‬
‫‪ v‬را ﻋﻼﻣﺖ ﺑﺰن و در اﻧﺘﻬﺎی ﺻﻒ ﺑﮕﺬار‬
‫‪d[v]=d[u]+1‬‬
‫اﻟﮕﻮرﯾﺘﻢ ﺟﺴﺘﺠﻮی ﺳﻄﺢ اول )‪(BFS‬‬

‫• راس ﺷﺮوع ‪ s‬را داﺧﻞ ﯾﮏ ﺻﻒ ﺑﮕﺬار‬


‫• ﻓﺎﺻﻠﻪی راس ﺷﺮوع ﺗﺎ ﺧﻮدش را ﺻﻔﺮ ﮐﻦ ‪d[s]=0‬‬
‫• راس ﺷﺮوع را ﻋﻼﻣﺖ ﺑﺰن‬
‫• ﺗﺎ وﻗﺘﯽ ﺻﻒ ﺧﺎﻟﯽ ﻧﯿﺴﺖ‪:‬‬
‫راس اول ﺻﻒ را ﺑﺮدار و آن را در ‪ u‬ﺑﺮﯾﺰ‬
‫ﺑﺮای ﻫﻤﻪی ﻫﻤﺴﺎﯾﻪﻫﺎی ‪ u‬ﻣﺜﻞ ‪ v‬اﻧﺠﺎم ﺑﺪه‪:‬‬
‫اﮔﺮ ‪ v‬ﻋﻼﻣﺖ ﻧﺨﻮردهاﺳﺖ‪:‬‬
‫‪ v‬را ﻋﻼﻣﺖ ﺑﺰن و در اﻧﺘﻬﺎی ﺻﻒ ﺑﮕﺬار‬
‫‪d[v]=d[u]+1‬‬
‫اﻟﮕﻮرﯾﺘﻢ ﺟﺴﺘﺠﻮی ﺳﻄﺢ اول )‪(BFS‬‬

‫• راس ﺷﺮوع ‪ s‬را داﺧﻞ ﯾﮏ ﺻﻒ ﺑﮕﺬار‬


‫• ﻓﺎﺻﻠﻪی راس ﺷﺮوع ﺗﺎ ﺧﻮدش را ﺻﻔﺮ ﮐﻦ ‪d[s]=0‬‬
‫• راس ﺷﺮوع را ﻋﻼﻣﺖ ﺑﺰن‬
‫• ﺗﺎ وﻗﺘﯽ ﺻﻒ ﺧﺎﻟﯽ ﻧﯿﺴﺖ‪:‬‬
‫راس اول ﺻﻒ را ﺑﺮدار و آن را در ‪ u‬ﺑﺮﯾﺰ‬
‫ﺑﺮای ﻫﻤﻪی ﻫﻤﺴﺎﯾﻪﻫﺎی ‪ u‬ﻣﺜﻞ ‪ v‬اﻧﺠﺎم ﺑﺪه‪:‬‬
‫اﮔﺮ ‪ v‬ﻋﻼﻣﺖ ﻧﺨﻮردهاﺳﺖ‪:‬‬
‫‪ v‬را ﻋﻼﻣﺖ ﺑﺰن و در اﻧﺘﻬﺎی ﺻﻒ ﺑﮕﺬار‬
‫‪d[v]=d[u]+1‬‬
‫اﻟﮕﻮرﯾﺘﻢ ﺟﺴﺘﺠﻮی ﺳﻄﺢ اول )‪(BFS‬‬

‫• راس ﺷﺮوع ‪ s‬را داﺧﻞ ﯾﮏ ﺻﻒ ﺑﮕﺬار‬


‫• ﻓﺎﺻﻠﻪی راس ﺷﺮوع ﺗﺎ ﺧﻮدش را ﺻﻔﺮ ﮐﻦ ‪d[s]=0‬‬
‫• راس ﺷﺮوع را ﻋﻼﻣﺖ ﺑﺰن‬
‫• ﺗﺎ وﻗﺘﯽ ﺻﻒ ﺧﺎﻟﯽ ﻧﯿﺴﺖ‪:‬‬
‫راس اول ﺻﻒ را ﺑﺮدار و آن را در ‪ u‬ﺑﺮﯾﺰ‬
‫ﺑﺮای ﻫﻤﻪی ﻫﻤﺴﺎﯾﻪﻫﺎی ‪ u‬ﻣﺜﻞ ‪ v‬اﻧﺠﺎم ﺑﺪه‪:‬‬
‫اﮔﺮ ‪ v‬ﻋﻼﻣﺖ ﻧﺨﻮردهاﺳﺖ‪:‬‬
‫‪ v‬را ﻋﻼﻣﺖ ﺑﺰن و در اﻧﺘﻬﺎی ﺻﻒ ﺑﮕﺬار‬
‫‪d[v]=d[u]+1‬‬
‫اﻟﮕﻮرﯾﺘﻢ ﺟﺴﺘﺠﻮی ﺳﻄﺢ اول )‪(BFS‬‬

‫• راس ﺷﺮوع ‪ s‬را داﺧﻞ ﯾﮏ ﺻﻒ ﺑﮕﺬار‬


‫• ﻓﺎﺻﻠﻪی راس ﺷﺮوع ﺗﺎ ﺧﻮدش را ﺻﻔﺮ ﮐﻦ ‪d[s]=0‬‬
‫• راس ﺷﺮوع را ﻋﻼﻣﺖ ﺑﺰن‬
‫• ﺗﺎ وﻗﺘﯽ ﺻﻒ ﺧﺎﻟﯽ ﻧﯿﺴﺖ‪:‬‬
‫راس اول ﺻﻒ را ﺑﺮدار و آن را در ‪ u‬ﺑﺮﯾﺰ‬
‫ﺑﺮای ﻫﻤﻪی ﻫﻤﺴﺎﯾﻪﻫﺎی ‪ u‬ﻣﺜﻞ ‪ v‬اﻧﺠﺎم ﺑﺪه‪:‬‬
‫اﮔﺮ ‪ v‬ﻋﻼﻣﺖ ﻧﺨﻮردهاﺳﺖ‪:‬‬
‫‪ v‬را ﻋﻼﻣﺖ ﺑﺰن و در اﻧﺘﻬﺎی ﺻﻒ ﺑﮕﺬار‬
‫‪d[v]=d[u]+1‬‬
‫اﻟﮕﻮرﯾﺘﻢ ﺟﺴﺘﺠﻮی ﺳﻄﺢ اول )‪(BFS‬‬

‫• راس ﺷﺮوع ‪ s‬را داﺧﻞ ﯾﮏ ﺻﻒ ﺑﮕﺬار‬


‫• ﻓﺎﺻﻠﻪی راس ﺷﺮوع ﺗﺎ ﺧﻮدش را ﺻﻔﺮ ﮐﻦ ‪d[s]=0‬‬
‫• راس ﺷﺮوع را ﻋﻼﻣﺖ ﺑﺰن‬
‫• ﺗﺎ وﻗﺘﯽ ﺻﻒ ﺧﺎﻟﯽ ﻧﯿﺴﺖ‪:‬‬
‫راس اول ﺻﻒ را ﺑﺮدار و آن را در ‪ u‬ﺑﺮﯾﺰ‬
‫ﺑﺮای ﻫﻤﻪی ﻫﻤﺴﺎﯾﻪﻫﺎی ‪ u‬ﻣﺜﻞ ‪ v‬اﻧﺠﺎم ﺑﺪه‪:‬‬
‫اﮔﺮ ‪ v‬ﻋﻼﻣﺖ ﻧﺨﻮردهاﺳﺖ‪:‬‬
‫‪ v‬را ﻋﻼﻣﺖ ﺑﺰن و در اﻧﺘﻬﺎی ﺻﻒ ﺑﮕﺬار‬
‫‪d[v]=d[u]+1‬‬
‫اﻟﮕﻮرﯾﺘﻢ ﺟﺴﺘﺠﻮی ﺳﻄﺢ اول )‪(BFS‬‬

‫• راس ﺷﺮوع ‪ s‬را داﺧﻞ ﯾﮏ ﺻﻒ ﺑﮕﺬار‬


‫• ﻓﺎﺻﻠﻪی راس ﺷﺮوع ﺗﺎ ﺧﻮدش را ﺻﻔﺮ ﮐﻦ ‪d[s]=0‬‬
‫• راس ﺷﺮوع را ﻋﻼﻣﺖ ﺑﺰن‬
‫• ﺗﺎ وﻗﺘﯽ ﺻﻒ ﺧﺎﻟﯽ ﻧﯿﺴﺖ‪:‬‬
‫راس اول ﺻﻒ را ﺑﺮدار و آن را در ‪ u‬ﺑﺮﯾﺰ‬
‫ﺑﺮای ﻫﻤﻪی ﻫﻤﺴﺎﯾﻪﻫﺎی ‪ u‬ﻣﺜﻞ ‪ v‬اﻧﺠﺎم ﺑﺪه‪:‬‬
‫اﮔﺮ ‪ v‬ﻋﻼﻣﺖ ﻧﺨﻮردهاﺳﺖ‪:‬‬
‫‪ v‬را ﻋﻼﻣﺖ ﺑﺰن و در اﻧﺘﻬﺎی ﺻﻒ ﺑﮕﺬار‬
‫‪d[v]=d[u]+1‬‬
‫اﻟﮕﻮرﯾﺘﻢ ﺟﺴﺘﺠﻮی ﺳﻄﺢ اول )‪(BFS‬‬

‫• راس ﺷﺮوع ‪ s‬را داﺧﻞ ﯾﮏ ﺻﻒ ﺑﮕﺬار‬


‫• ﻓﺎﺻﻠﻪی راس ﺷﺮوع ﺗﺎ ﺧﻮدش را ﺻﻔﺮ ﮐﻦ ‪d[s]=0‬‬
‫• راس ﺷﺮوع را ﻋﻼﻣﺖ ﺑﺰن‬
‫• ﺗﺎ وﻗﺘﯽ ﺻﻒ ﺧﺎﻟﯽ ﻧﯿﺴﺖ‪:‬‬
‫راس اول ﺻﻒ را ﺑﺮدار و آن را در ‪ u‬ﺑﺮﯾﺰ‬
‫ﺑﺮای ﻫﻤﻪی ﻫﻤﺴﺎﯾﻪﻫﺎی ‪ u‬ﻣﺜﻞ ‪ v‬اﻧﺠﺎم ﺑﺪه‪:‬‬
‫اﮔﺮ ‪ v‬ﻋﻼﻣﺖ ﻧﺨﻮردهاﺳﺖ‪:‬‬
‫‪ v‬را ﻋﻼﻣﺖ ﺑﺰن و در اﻧﺘﻬﺎی ﺻﻒ ﺑﮕﺬار‬
‫‪d[v]=d[u]+1‬‬
‫وﻗﺖ ﮐﺪزدن ‪(:‬‬
‫ﮔﺮاف وزندار‬

‫‪٨‬‬
‫‪٧‬‬
‫• ﻣـﺪتزﻣـﺎن ﺗـﻘﺮﯾﺒﯽ ﭘﯿﻤﻮدن ﻫـﺮ ﺧﯿﺎﺑـﺎن )ﺑـﺮ ﺣﺴـﺐ‬
‫‪۵‬‬ ‫‪٣‬‬
‫‪٣‬‬ ‫دﻗﯿﻘﻪ( را ﺑــــﻪ ﻋــــﻨﻮان وزن ﯾﺎل ﻣــــﺘﻨﺎﻇــــﺮ در ﻧــــﻈﺮ‬
‫‪٣‬‬
‫‪٣‬‬ ‫‪٧‬‬ ‫‪١‬‬
‫ﺑﮕﯿﺮﯾﻢ‪.‬‬
‫‪١‬‬ ‫‪٢‬‬ ‫‪١‬‬
‫‪١‬‬
‫‪٢‬‬
‫• در اﯾﻦ ﺻــــــﻮرت ﻣﯽﺗــــــﻮاﻧﯿﻢ ﺑــــــﻪ دﻧــــــﺒﺎل ﻣﺴﯿﺮی‬
‫‪U‬‬
‫‪١‬‬
‫‪۴‬‬
‫‪۴‬‬ ‫‪٢‬‬ ‫‪٣‬‬
‫‪٢‬‬ ‫ﺑﮕﺮدﯾﻢ ﮐﻪ ﻣﺠﻤﻮع وزن ﯾﺎلﻫﺎﯾﺶ ﮐﻤﯿﻨﻪ ﺑﺎﺷﺪ‪.‬‬
‫‪٢‬‬ ‫‪٢‬‬
‫‪٨‬‬ ‫‪٩‬‬
‫‪٣‬‬ ‫‪V‬‬

‫‪٢‬‬ ‫‪٢‬‬
‫ﮔﺮاف وزندار‬

‫‪٨‬‬
‫‪٧‬‬
‫• ﻣـﺪتزﻣـﺎن ﺗـﻘﺮﯾﺒﯽ ﭘﯿﻤﻮدن ﻫـﺮ ﺧﯿﺎﺑـﺎن )ﺑـﺮ ﺣﺴـﺐ‬
‫‪۵‬‬ ‫‪٣‬‬
‫‪٣‬‬ ‫دﻗﯿﻘﻪ( را ﺑــــﻪ ﻋــــﻨﻮان وزن ﯾﺎل ﻣــــﺘﻨﺎﻇــــﺮ در ﻧــــﻈﺮ‬
‫‪٣‬‬
‫‪٣‬‬ ‫‪٧‬‬ ‫‪١‬‬
‫ﺑﮕﯿﺮﯾﻢ‪.‬‬
‫‪١‬‬ ‫‪٢‬‬ ‫‪١‬‬
‫‪١‬‬
‫‪٢‬‬
‫• در اﯾﻦ ﺻــــــﻮرت ﻣﯽﺗــــــﻮاﻧﯿﻢ ﺑــــــﻪ دﻧــــــﺒﺎل ﻣﺴﯿﺮی‬
‫‪U‬‬
‫‪١‬‬
‫‪۴‬‬
‫‪۴‬‬ ‫‪٢‬‬ ‫‪٣‬‬
‫‪٢‬‬ ‫ﺑﮕﺮدﯾﻢ ﮐﻪ ﻣﺠﻤﻮع وزن ﯾﺎلﻫﺎﯾﺶ ﮐﻤﯿﻨﻪ ﺑﺎﺷﺪ‪.‬‬
‫‪٢‬‬ ‫‪٢‬‬
‫‪٨‬‬ ‫‪٩‬‬
‫‪٣‬‬ ‫‪V‬‬

‫‪٢‬‬ ‫‪٢‬‬
‫اﻟﮕﻮرﯾﺘﻢ ﯾﺎﻓﺘﻦ ﻫﻤﻪی زوج ﻓﺎﺻﻠﻪﻫﺎ‬

‫• ﺑﻪ ازای ﻫﻤﻪی راسﻫﺎی ‪ u,v‬ﻓﺎﺻﻠﻪی ‪ u,v‬را ﺑﯽﻧﻬﺎﯾﺖ ﺑﮕﯿﺮ‪d[u,v]=inf :‬‬


‫• ﻓﺎﺻﻠﻪی ﻫﺮ راس ﺗﺎ ﺧﻮدش را ﺻﻔﺮ ﺑﮕﯿﺮ‪d[u,u]=0 :‬‬
‫• ﺑﻪ ازای ﻫﺮ ﯾﺎل ‪ u, v‬ﺑﺎ وزن ‪ w‬ﻗﺮار ﺑﺪه ‪d[u,v]=w‬‬
‫• ﺑﻪ ازای ﻫﺮ ‪ k‬ﺑﯿﻦ ‪ ۰‬ﺗﺎ ‪:n-1‬‬
‫ﺑﻪ ازای ﻫﺮ ‪ i‬ﺑﯿﻦ ‪ 0‬ﺗﺎ ‪:n-1‬‬
‫ﺑﻪ ازای ﻫﺮ ‪ j‬ﺑﯿﻦ ‪ 0‬ﺗﺎ ‪:n-1‬‬
‫اﮔﺮ ]‪ d[i,j‬ﺑﺰرگﺗﺮ از ]‪ d[i,k]+d[k,j‬ﺑﻮد ﻗﺮار ﺑﺪه ]‪d[i,j]=d[i,k]+d[k,j‬‬
‫اﻟﮕﻮرﯾﺘﻢ ﯾﺎﻓﺘﻦ ﻫﻤﻪی زوج ﻓﺎﺻﻠﻪﻫﺎ‬

‫• ﺑﻪ ازای ﻫﻤﻪی راسﻫﺎی ‪ u,v‬ﻓﺎﺻﻠﻪی ‪ u,v‬را ﺑﯽﻧﻬﺎﯾﺖ ﺑﮕﯿﺮ‪d[u,v]=inf :‬‬


‫• ﻓﺎﺻﻠﻪی ﻫﺮ راس ﺗﺎ ﺧﻮدش را ﺻﻔﺮ ﺑﮕﯿﺮ‪d[u,u]=0 :‬‬
‫• ﺑﻪ ازای ﻫﺮ ﯾﺎل ‪ u, v‬ﺑﺎ وزن ‪ w‬ﻗﺮار ﺑﺪه ‪d[u,v]=w‬‬
‫• ﺑﻪ ازای ﻫﺮ ‪ k‬ﺑﯿﻦ ‪ ۰‬ﺗﺎ ‪:n-1‬‬
‫ﺑﻪ ازای ﻫﺮ ‪ i‬ﺑﯿﻦ ‪ 0‬ﺗﺎ ‪:n-1‬‬
‫ﺑﻪ ازای ﻫﺮ ‪ j‬ﺑﯿﻦ ‪ 0‬ﺗﺎ ‪:n-1‬‬
‫اﮔﺮ ]‪ d[i,j‬ﺑﺰرگﺗﺮ از ]‪ d[i,k]+d[k,j‬ﺑﻮد ﻗﺮار ﺑﺪه ]‪d[i,j]=d[i,k]+d[k,j‬‬
‫اﻟﮕﻮرﯾﺘﻢ ﯾﺎﻓﺘﻦ ﻫﻤﻪی زوج ﻓﺎﺻﻠﻪﻫﺎ‬

‫• ﺑﻪ ازای ﻫﻤﻪی راسﻫﺎی ‪ u,v‬ﻓﺎﺻﻠﻪی ‪ u,v‬را ﺑﯽﻧﻬﺎﯾﺖ ﺑﮕﯿﺮ‪d[u,v]=inf :‬‬


‫• ﻓﺎﺻﻠﻪی ﻫﺮ راس ﺗﺎ ﺧﻮدش را ﺻﻔﺮ ﺑﮕﯿﺮ‪d[u,u]=0 :‬‬
‫• ﺑﻪ ازای ﻫﺮ ﯾﺎل ‪ u, v‬ﺑﺎ وزن ‪ w‬ﻗﺮار ﺑﺪه ‪d[u,v]=w‬‬
‫• ﺑﻪ ازای ﻫﺮ ‪ k‬ﺑﯿﻦ ‪ ۰‬ﺗﺎ ‪:n-1‬‬
‫ﺑﻪ ازای ﻫﺮ ‪ i‬ﺑﯿﻦ ‪ 0‬ﺗﺎ ‪:n-1‬‬
‫ﺑﻪ ازای ﻫﺮ ‪ j‬ﺑﯿﻦ ‪ 0‬ﺗﺎ ‪:n-1‬‬
‫اﮔﺮ ]‪ d[i,j‬ﺑﺰرگﺗﺮ از ]‪ d[i,k]+d[k,j‬ﺑﻮد ﻗﺮار ﺑﺪه ]‪d[i,j]=d[i,k]+d[k,j‬‬
‫اﻟﮕﻮرﯾﺘﻢ ﯾﺎﻓﺘﻦ ﻫﻤﻪی زوج ﻓﺎﺻﻠﻪﻫﺎ‬

‫• ﺑﻪ ازای ﻫﻤﻪی راسﻫﺎی ‪ u,v‬ﻓﺎﺻﻠﻪی ‪ u,v‬را ﺑﯽﻧﻬﺎﯾﺖ ﺑﮕﯿﺮ‪d[u,v]=inf :‬‬


‫• ﻓﺎﺻﻠﻪی ﻫﺮ راس ﺗﺎ ﺧﻮدش را ﺻﻔﺮ ﺑﮕﯿﺮ‪d[u,u]=0 :‬‬
‫• ﺑﻪ ازای ﻫﺮ ﯾﺎل ‪ u, v‬ﺑﺎ وزن ‪ w‬ﻗﺮار ﺑﺪه ‪d[u,v]=w‬‬
‫• ﺑﻪ ازای ﻫﺮ ‪ k‬ﺑﯿﻦ ‪ ۰‬ﺗﺎ ‪:n-1‬‬
‫ﺑﻪ ازای ﻫﺮ ‪ i‬ﺑﯿﻦ ‪ 0‬ﺗﺎ ‪:n-1‬‬
‫ﺑﻪ ازای ﻫﺮ ‪ j‬ﺑﯿﻦ ‪ 0‬ﺗﺎ ‪:n-1‬‬
‫اﮔﺮ ]‪ d[i,j‬ﺑﺰرگﺗﺮ از ]‪ d[i,k]+d[k,j‬ﺑﻮد ﻗﺮار ﺑﺪه ]‪d[i,j]=d[i,k]+d[k,j‬‬
‫اﻟﮕﻮرﯾﺘﻢ ﯾﺎﻓﺘﻦ ﻫﻤﻪی زوج ﻓﺎﺻﻠﻪﻫﺎ‬

‫• ﺑﻪ ازای ﻫﻤﻪی راسﻫﺎی ‪ u,v‬ﻓﺎﺻﻠﻪی ‪ u,v‬را ﺑﯽﻧﻬﺎﯾﺖ ﺑﮕﯿﺮ‪d[u,v]=inf :‬‬


‫• ﻓﺎﺻﻠﻪی ﻫﺮ راس ﺗﺎ ﺧﻮدش را ﺻﻔﺮ ﺑﮕﯿﺮ‪d[u,u]=0 :‬‬
‫• ﺑﻪ ازای ﻫﺮ ﯾﺎل ‪ u, v‬ﺑﺎ وزن ‪ w‬ﻗﺮار ﺑﺪه ‪d[u,v]=w‬‬
‫• ﺑﻪ ازای ﻫﺮ ‪ k‬ﺑﯿﻦ ‪ ۰‬ﺗﺎ ‪:n-1‬‬
‫ﺑﻪ ازای ﻫﺮ ‪ i‬ﺑﯿﻦ ‪ 0‬ﺗﺎ ‪:n-1‬‬
‫ﺑﻪ ازای ﻫﺮ ‪ j‬ﺑﯿﻦ ‪ 0‬ﺗﺎ ‪:n-1‬‬
‫اﮔﺮ ]‪ d[i,j‬ﺑﺰرگﺗﺮ از ]‪ d[i,k]+d[k,j‬ﺑﻮد ﻗﺮار ﺑﺪه ]‪d[i,j]=d[i,k]+d[k,j‬‬
‫وﻗﺖ ﮐﺪزدن ‪(:‬‬
‫ﺷﺎد و ﺗﻦدرﺳﺖ ﺑﺎﺷﯿﺪ ‪(-:‬‬

You might also like