prac2.doc

‫به نام خدا‬
‫دانشگاه صنعتی شریف – دانشکده مهندسی کامپیوتر‬
‫ساختمان های گسسته – علی شریفی زارچی‬
‫تمرین عملی دوم‬
‫قطر درخت‬
‫گراف همبند بدون دور را درخت میگوییم‪ .‬بین هر دو راسی کوتاهترین‬
‫فاصله را در نظر میگیریم؛ از بین تمام این کوتاهترین فاصلهها‬
‫بزرگترین آنها را قطر درخت میگوییم‪ .‬برنامهای بنویسید که با گرفتن‬
‫درخت از ورودی قطر آن را محاسبه کند‪.‬‬
‫قالب ورودی‬
‫در خط اول ورودی ‪ n‬تعداد رأسهای درخت آمده است‪ .‬رأسهای درخت از ‪ 1‬تا‬
‫سپس در ‪ n-1‬خط بعدی در هر خط دو عدد آمده‬
‫‪ n‬شماره گذاری شدهاند‪.‬‬
‫است که مشخص میکند که کدام دو راس به هم متصل هستند‪( .‬در ‪ ۷۰‬درصد‬
‫است و در ‪ ۳۰‬درصد باقیمانده ‪n<100000‬‬
‫از نمرهی این سوال ‪n < 100‬‬
‫است)‬
‫قالب خروجی‬
‫در خط اول خروجی اندازهی قطر گراف را بنویسید‪.‬‬
‫مثال ورودی‬
‫‪7‬‬
‫‪12‬‬
‫‪23‬‬
‫‪73‬‬
‫‪54‬‬
‫‪35‬‬
‫‪56‬‬
‫مثال خروجی‬
‫‪4‬‬
‫برجهای هانوی‬
‫سه میله و تعدادی دیسک در اندازه های متفاوت داریم‪ .‬این دیسکها از‬
‫بزرگ به کوچک با شماره ‪ 1‬تا ‪ n‬شمارهگذاری شدهاند‪ .‬میلهها هم از ‪1‬‬
‫تا ‪ 3‬شماره گذاری شدهاند‪ .‬در حالت اولیه این ‪ n‬دیسک روی این ‪ 3‬میله‬
‫به نحوی قرار گرفتهاند که هیچ دیسکی با اندازهی بزرگ روی دیسک با‬
‫اندازهی کوچکتر قرار نگرفته است‪ .‬در هر حرکت میتوانیم از یک میله‬
‫باالترین دیسک آن را خارج کرده و روی میلهی دیگری قرار دهیم با این‬
‫شرط که شرط هانوی نقض نشود؛ یعنی هیچ دیسکی با اندازهی بزرگتر روی‬
‫دیسک با اندازهی کوچکتر قرار نگیرد‪ .‬با دنبالهای از این حرکات می‪-‬‬
‫خواهیم کاری کنیم که همهی دیسکها از بزرگ به کوچک ( یعنی از دیسک‬
‫شمارهی ‪ 1‬تا دیسک شماره ‪ )n‬روی میلهی ‪ 1‬مرتب شده باشند‪ .‬شما باید‬
‫برنامهای بنویسید که این کار را در کمترین تعداد حرکات انجام دهد‪.‬‬
‫به عالوه شما باید نحوهی انجام این کار را نیز بگویید‪.‬‬
‫قالب ورودی‬
‫در خط اول ورودی ‪ ، n‬تعداد دیسکها آمده است‪ .‬سپس در سه خط بعدی‬
‫وضعیت اولیه میلههای ‪ 1‬تا ‪ 3‬به ترتیب آمده است‪ .‬در سه خط بعدی‪ ،‬در‬
‫ابتدا تعداد دیسکهای میلهی متناظر آمده است‪ .‬سپس شمارهی‬
‫هر خط‬
‫َ‬
‫دیسکهای روی آن میله از پایین به باال آمده است‪(.‬که قاعدتا این‬
‫اعداد صعودی هستند)‪ .‬بین هر دو عدد یک سطر یک فاصله قرار دارد‪ .‬در‬
‫ضمن ‪. n <= 16‬‬
‫قالب خروجی‬
‫در خط اول خروجی ابتدا تعداد کمینهی حرکات برای انتقال همهی دیسکها‬
‫به میلهی ‪ 1‬را بنویسید‪ .‬سپس در خطوط بعدی حرکات را به ترتیب‬
‫بنویسید‪ .‬برای نوشتن حرکات کافیست شمارهی میلهای که باالترین دیسک‬
‫آن را خارج میکنید و شمارهی میلهای که این دیسک را روی آن می‬
‫گذارید به ترتیب با یک فاصله بنویسید‪.‬‬
‫مثال ورودی‬
‫‪3‬‬
‫‪0‬‬
‫‪213‬‬
‫‪12‬‬
‫مثال خروجی‬
‫‪5‬‬
‫‪23‬‬
‫‪21‬‬
‫‪32‬‬
‫‪31‬‬
‫‪21‬‬
‫توضیحات‪:‬‬
‫‪ – 1‬برنامه های خود را با نام ‪ diameter.cpp‬و ‪ hanoi.cpp‬بفرستید‪ .‬برای کامپایل‬
‫کردن برنامههای خود از کامپایلرهای استاندارد استفاده کنید‪.‬‬
‫‪– 2‬‬
‫دادهها را از ورودی استاندارد بخوانید و در ورودی استاندارد بنویسید‪.‬‬
‫‪ – 3‬مهلت ارسال این تمرینات روزدو شنبه ‪ 23‬اردیبهشت ساعت ‪ 12‬ظهر میباشد‪..‬‬
‫‪ – 4‬سعی میشود تا چند روز قبل از اتمام مهلت ارسال امکان ‪online submit and‬‬
‫‪ judge‬فراهم شود‪.‬‬
‫‪ – 5‬سواالت خود را در قسمت ‪ discussion area‬درس مطرح کنید‪.‬‬