))ﺑﻪ ﻧﺎم ﺧﺪاوﻧﺪ ﺑﺨﺸﻨﺪه ي ﻣﻬﺮﺑﺎن (( ﺗﻤﺮﻳﻦ ﺷﻤﺎره ي -درس ﻃﺮاﺣﻲ اﻟﮕﻮرﻳﺘﻤﻬﺎ ﻣﻬﻠﺖ ﺗﺤﻮﻳﻞ ﺗﻤﺮﻳﻦ 1387/2/15 :ﺳﺎﻋﺖ 23:59 ) (DFS, BFS ﻣﻼﺣﻈﺎت : اﻳﻦ ﺗﻤﺮﻳﻦ ﻫﻢ داراي ﻗﺴﻤﺘﻬﺎي ﺗﺌﻮري و ﻫﻢ ﻋﻤﻠﻲ اﺳﺖ .ﭘﺎﺳﺦ ﻗﺴﻤﺘﻬﺎي ﺗﺌﻮري و ﻋﻤﻠﻲ را در ﻗﺎﻟﺐ ﻳﻚ ﻓﺎﻳﻞ ﻓﺸﺮده ﺑﻪ ﻧﺎم Ex3-yourID.zipﺑﻪ آدرس sharifdaexer@gmail.comﻣﻴﻞ ﻛﻨﻴﺪ .ﻋﻨﻮان ﭘﺴﺖ اﻟﻜﺘﺮوﻧﻴﻜﻲ ﻧﻴﺰ Ex3-yourIDﺑﺎﻳﺪ ﺑﺎﺷﺪ. ﺑﻪ ﻫﻴﭻ وﺟﻪ ﻛﺎر ﻫﺎي ﻏﻴﺮ اﺧﻼﻗﻲ ﻣﺜﻞ روﻧﻮﻳﺴﻲ و ﻛﭙﻲ ﺑﺮﻧﺎﻣﻪ ي دﻳﮕﺮان و ....ﭘﺬﻳﺮﻓﺘﻪ ﻧﻴﺴﺖ .درﺻﻮرت ﻣﺸﺎﻫﺪه ﻧﻤﺮه ي ﺷﻤﺎ -100در ﻧﻈﺮﮔﺮﻓﺘﻪ ﻣﻲ ﺷﻮد) .اﮔﺮ ﺗﻤﺮﻳﻨﺎت را ﺑﺎ ﻫﻢ ﻣﻲ ﻧﻮﻳﺴﻴﺪ ﺳﻌﻲ ﻛﻨﻴﺪ ﻃﺮﻳﻖ ﻧﻮﺷﺘﻦ ﺷﻤﺎ ﻣﺎﻧﻨﺪ ﻳﻜﺪﻳﮕﺮ ﻧﺒﺎﺷﺪ .ﭼﻮن در ﺻﻮرت ﻣﺸﺎﺑﻬﺖ ﺑﺎ وﺟﻮد ﺑﻲ ﮔﻨﺎﻫﻲ ،ﮔﻨﺎﻫﻜﺎر ﺷﻨﺎﺧﺘﻪ ﺧﻮاﻫﻴﺪ ﺷﺪ و ﻧﻤﺮه ي ﺧﻮد را از دﺳﺖ ﺧﻮاﻫﻴﺪ داد( ﺑﻪ ﻫﻴﭻ وﺟﻪ زﻣﺎن ﺗﺤﻮﻳﻞ اﻳﻦ ﺗﻤﺮﻳﻦ ﺗﻤﺪﻳﺪ ﻧﻤﻲ ﺷﻮد .ﺑﻪ ازاي ﻫﺮﺳﺎﻋﺖ ﺗﺎﺧﻴﺮ 20ﻧﻤﺮه )از 100ﻧﻤﺮه( را از دﺳﺖ ﻣﻲ دﻫﻴﺪ. -ﻫﺮ ﮔﻮﻧﻪ ﺳﻮال و ﻣﺸﻜﻠﻲ و ﻳﺎ اﻳﺮادي را ﻣﻲ ﺗﻮاﻧﻴﺪ ﺑﺎ mohammadamin.fazli@gmail.comدر ﻣﻴﺎن ﺑﮕﺬارﻳﺪ. -1ﮔﺮاف ﺷﺒﻪ ﻫﻤﺒﻨﺪ ☻ﮔﺮاف ﺟﻬﺖ دار Gﺷﺒﻪ ﻫﻤﺒﻨﺪ ﻧﺎﻣﻴﺪه ﻣﻲﺷﻮد اﮔﺮ ﺑﻪ ازاي ﻫﺮ دو راس uو vاز اﻳﻦ ﮔﺮاف ﺣﺪاﻗﻞ ﻳﻚ ﻣﺴﻴﺮ ﺟﻬﺖ دار از uﺑﻪ vﻳﺎ از vﺑﻪ uوﺟﻮد داﺷﺘﻪ ﺑﺎﺷﺪ)دﻗﺖ ﻛﻨﻴﺪ ﻛﻪ ﺑﺎ ﻗﻮﻳﺎ ﻫﻤﺒﻨﺪ ﻣﺘﻔﺎوت اﺳﺖ( ﺑﻪ ﻋﻨﻮان ﻣﺜﺎل ﮔﺮاف ﺷﻜﻞ زﻳﺮ ﺷﺒﻪ ﻫﻤﺒﻨﺪ اﺳﺖ. اﻟﮕﻮرﻳﺘﻤﻲ ﺑﺮاي اﻳﻦ ﻛﺎر ﺑﻴﺎﺑﻴﺪ .اﻟﮕﻮرﻳﺘﻢ ﺧﻮد را ﺑﻪ دﻗﺖ ﺗﺸﺮﻳﺢ ﻛﻨﻴﺪ) .ارﺳﺎل ﺷﻮد( ﺑﺮﻧﺎﻣﻪ اي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﺷﺒﻪ ﻫﻤﺒﻨﺪ ﺑﻮدن ﮔﺮاف را ﺑﻴﺎزﻣﺎﻳﺪ ) در ﻓﺎﻳﻞ semiconnect.javaﻳﺎ (semiconnect.cpp در ﺧﻂ اول ﻓﺎﻳﻞ ورودي ) (semiconnect.inﻋﺪد nﺗﻌﺪاد راﺳﻬﺎي ﮔﺮاف آﻣﺪه اﺳﺖ .در nﺳﻄﺮ ﺑﻌﺪي ﻣﺎﺗﺮﻳﺲ ﻣﺠﺎورت ﮔﺮاف وﺟﻮد دارد. در ﻓﺎﻳﻞ ﺧﺮوﺟﻲ ) (semmiconnect.outﺑﻪ ازاي ﻣﺜﺒﺖ ﺑﻮدن ﺟﻮاب ﻋﺒﺎرت Yesو در ﻏﻴﺮ اﻳﻦ ﺻﻮرت ﻋﺒﺎرت Noرا ﺑﻨﻮﻳﺴﻴﺪ. -2ﻛﺎرﮔﺮي!! ☺ ﻛﺎرﮔﺮي را در ﻳﻚ ﻣﺎز در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ .ﻣﺎز ﻣﺎ ﻳﻚ ﺟﺪول n*nاز 0و 1اﺳﺖ ﻛﻪ 1ﺑﻪ ﻣﻌﻨﻲ وﺟﻮد دﻳﻮار در آن ﻧﻘﻄﻪ از ﺟﺪول ﻣﻲﺑﺎﺷﺪ .در اﺑﺘﺪاي ﻛﺎر ﺟﻌﺒﻪاي در ﻧﻘﻄﻪي ) (xb,ybاز اﻳﻦ ﻣﺎز ﻗﺮار ﮔﺮﻓﺘﻪ اﺳﺖ)ﮔﻮﺷﻪ ي ﺑﺎﻻ ﺳﻤﺖ ﭼﭗ ) (1،1اﺳﺖ( .ﻛﺎرﮔﺮ ﻧﻴﺰ در اﺑﺘﺪاي ﻛﺎر در ﻧﻘﻄﻪ- ي ) (xw,ywاز اﻳﻦ ﻣﺎز ﻗﺮار ﮔﺮﻓﺘﻪ اﺳﺖ .در ﻫﺮ ﺣﺮﻛﺖ ﻛﺎرﮔﺮ ﻣﻲﺗﻮاﻧﺪ ﺑﻪ ﺳﻤﺖ ﺷﺮق ،ﻏﺮب ،ﺷﻤﺎل ﻳﺎ ﺟﻨﻮب در ﺻﻮرت ﻋﺪم وﺟﻮد دﻳﻮار ﻳﻚ ﮔﺎم ﺑﺮدارد .در ﺻﻮرﺗﻲ ﻛﻪ ﺟﻌﺒﻪ در راﺳﺘﺎي ﺣﺮﻛﺘﺶ ﺑﺎﺷﺪ آن را ﻧﻴﺰ ﻳﻚ واﺣﺪ در راﺳﺘﺎي ﺣﺮﻛﺘﺶ ﻫﻞ ﻣﻲدﻫﺪ)در ﺻﻮرﺗﻲ ﻛﻪ ﺧﺎﻧﻪي ﻣﻘﺼﺪ ﺟﻌﺒﻪ دﻳﻮار ﺑﺎﺷﺪ ﻧﻪ ﺟﻌﺒﻪ و ﻧﻪ ﻛﺎرﮔﺮ ﺣﺮﻛﺖ ﻧﺨﻮاﻫﻨﺪ ﻛﺮد .( .ﻫﺪف اﻳﻦ اﺳﺖ ﻛﻪ ﻛﺎرﮔﺮ ﺑﺎ ﻛﻤﺘﺮﻳﻦ ﺗﻌﺪاد ﺣﺮﻛﺖ ﺟﻌﺒﻪ را ﺑﻪ ﻧﻘﻄﻪي )(xf,yf ﺑﺮﺳﺎﻧﺪ .ﭼﮕﻮﻧﻪ ﺑﺎ اﺳﺘﻔﺎده از اﻟﮕﻮرﻳﺘﻢ BFSﻣﻲﺗﻮان اﻳﻦ ﻣﺴﺌﻠﻪ را ﺣﻞ ﻛﺮد .ﭘﺎﺳﺦ ﺧﻮد را ﺑﻪ دﻗﺖ ﺗﺸﺮﻳﺢ ﻛﻨﻴﺪ. ﺑﺮﻧﺎﻣﻪ اي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ اﻳﻦ ﻛﺎر را اﻧﺠﺎم دﻫﺪ)ﻓﺎﻳﻞ worker.cppﻳﺎ (worker.javaدر ﺧﻂ اول ﻓﺎﻳﻞ ورودي ) n (worker.inﻧﻮﺷﺘﻪ ﺷﺪه اﺳﺖ .در nﺧﻂ ﺑﻌﺪي ﻧﻘﺸﻪي ﻣﺎز ﺑﻪ ﺻﻮرت ﻳﻚ ﺟﺪول n*nاز 0و 1آﻣﺪه اﺳﺖ .ﭘﺲ از آن در ﺳﻪ ﺧﻂ اﻧﺘﻬﺎﻳﻲ ﻓﺎﻳﻞ ﺑﻪ ﺗﺮﺗﻴﺐ دوﺗﺎﻳﻲ ﻫﺎي ) (xb,ybو ) (xw,ywو ) (xf, yfآﻣﺪه اﺳﺖ .ﻧﻤﻮﻧﻪ اي از اﻳﻦ ﻓﺎﻳﻞ را در ﺷﻜﻞ زﻳﺮ ﻣﻲﺑﻴﻨﻴﺪ. در ﻓﺎﻳﻞ ﺧﺮوﺟﻲ) (worker.outاﺑﺘﺪاﺣﺪاﻗﻞ ﺗﻌﺪاد ﺣﺮﻛﺎت ﻻزم را ﺑﺮاي اﻳﻦ ﻛﺎر ﺑﻨﻮﻳﺴﻴﺪ .در ﺻﻮرﺗﻲ ﻛﻪ اﻳﻦ ﻛﺎر اﻧﺠﺎم ﻧﺎﺷﺪﻧﻲ اﺳﺖ ﻋﺪد -1 را در ﻓﺎﻳﻞ ﺑﻨﻮﻳﺴﻴﺪ .در ﺧﻂ ﺑﻌﺪي ﻓﺎﻳﻞ ﺧﺮوﺟﻲ ﺣﺮﻛﺎت ﻣﻮرد ﻧﻴﺎز ﻛﺎر ﮔﺮ را ﺑﻪ ﺻﻮرت دﻧﺒﺎﻟﻪ اي از Eو Wو Nو EAST) Sو WESTو NORTHو (SOUTHدرج ﻛﻨﻴﺪ .ﺑﻪ ﻋﻨﻮان ﻣﺜﺎﻟﻲ از ﺧﺮوﺟﻲ دارﻳﻢ : ٢ ٣
© Copyright 2025 Paperzz