0

صلح به زبان الگوريتم

 
samsam
samsam
کاربر طلایی1
تاریخ عضویت : بهمن 1387 
تعداد پست ها : 50672
محل سکونت : یزد

صلح به زبان الگوريتم

جنگي بين دو كشور A و B وجود دارد. شما به‌عنوان يك شهروند وفادار كشور C قصد داريد به كشور خود با برقراري گفتگوهاي صلح‌آميز بين كشورهاي A و B كمك كنيد.

Nنفر ديگر هم در حال گفتگو هستند، اما شما نمي‌دانيد كدام‌يك از آنها متعلق به كدام كشور است. تنها مي‌توانيد مردمي را كه در حال صحبت هستند، ببينيد و با مشاهده رفتار آنها در طي اين گفتگوهاي نفربه‌نفر، مي‌توان حدس زد که آنها دوست هستند يا دشمن؟

همچنين کشور فرد C بايد بداند اين جفت افرادي كه با هم صحبت مي‌كنند هر دو از يك كشور هستند يا دشمن هم هستند. در حالي‌كه صحبت‌هاي آنها شنيده مي‌شود، بايد با توجه به مشاهدات‌تان سوالاتي را كه دولت كشورتان از شما مي‌پرسد پاسخ دهيد.

حالا به‌صورت رسمي‌تر، جعبه سياهي را با عملكرد زير در نظر بگيريد:

setFriends(x,y)

نشان مي‌دهد كه x و y از يك كشور هستند.

setEnemies(x,y)  

نشان مي‌دهد كه x و y از كشورهاي مختلف هستند.

areFriends(x,y)

اگر مطمئن هستيد كه x وy دوست هستند true را برمي‌گرداند.

areEnemies(x,y)

اگر مطمئن هستيد كه x وy دشمن هستند true را برمي‌گرداند.

بسيار خب، حالا وظيفه ما اين است که مشخص کنيم رابطه بين دو نفر چگونه است. براي دو عمل اول اگر با دانش قبلي ما در تناقض باشد در خروجي عدد

1 چاپ شود. براي دو رابطه دوم اگر درست باشد 1 و اگر غلط باشد 0 راچاپ کند.

چند نکته وجود دارد که دقت به آنها شما را در حل مساله کمک خواهد کرد.

1- اگر x و y دوست باشند و y و z نيز دوست باشند نتيجه مي‌شود که x و z نيز دوست هستند.

2- اگر x و y دوست باشند، نتيجه مي‌شود که y و x نيز دوست هستند.

3- هر کس با خودش دوست است.

4- هيچ کس با خودش دشمن نيست.

5- اگر x با y دشمن بود و y هم با z دشمن، نتيجه مي‌شود که x و z با هم دوست هستند.

6- اگر x و y با هم دوست باشند و x با z دشمن باشد، نتيجه مي‌شود که y و z نيز دشمن هستند.

7- هيچ‌کس با خودش دشمن نيست.

8- رابطه ? براي دشمن بودن نيز صادق است.

بسيار خب، ورودي‌هاي برنامه ما به‌صورت يك عدد صحيح پشت سرهم است، اولين عدد نشان‌دهنده کد عملياتي است که رابطه بين افراد را مشخص مي‌کند و مي‌تواند يکي از سه عدد زير باشد.

c = 1,setFriends

c = 2,setEnemies

c = 3,areFriends

c = 4,areEnemies

و دو عدد بعدي کد افرادي است که ما بايد رابطه آنها را بررسي کنيم. ورودي‌ها با وارد کردن عبارت

0   0 0 خاتمه مي‌يابند.

خروجي برنامه بايد براي هر خط ورودي يکي از اعداد

0 و 1 و -1 را چاپ کند که نحوه به‌‌دست آوردن آن‌را بالا توضيح داده‌ايم.

ورودي نمونه:

1 0 1

1 1 2

2 0 5

3 0 2

3 8 9

4 1 5

4 1 2

4 8 9

1 8 9

1 5 2

3 5 2

0 0 0

خروجي نمونه:

1

0

1

0

0

-1

حال بايد روشي بيان کنيم كه بتوان رابطه بين افراد را تشخيص داد، برنامه ما شامل يک ساختار داده به‌شکل زير:

struct person{

int id;

person[] friends;

person[] enemies;

};

و يک آرايه از person با نام people که افرادي که در ورودي آورده شده‌اند را در خود ذخيره مي‌کند، تشکيل شده است.

حال براي هر خط ورودي اولين رقم چک مي‌شود، اگر setFriends يا setEnemies بود دو عدد بعدي در آرايه people جستجو مي‌شوند. اگر وجود داشته‌ باشند رابطه بين آنها چک مي‌شود، اگر با کد عمليات در تناقض بود، عدد

-1 در خروجي چاپ مي‌شود (چک کردن اين رابطه در پايين توضيح داده خواهد شد)، اگر حداقل يکي از آنها در آرايه وجود نداشت، فردي که وجود نداشته در آرايه قرار مي‌گيرد و مقدار friends و enemies براساس کد عمليات مقدار‌دهي مي‌شود. براي مثال اگر کد عمليات 1 باشد دو فرد با هم دوست هستند و دوست‌هاي اولي دوست‌هاي دومي و دشمن‌هاي اولي دوست‌هاي دومي هستند و همين‌طور برعکس.

اما اگر عمليات areFriends در فهرست دوست‌هاي اولي فرد دوم را جستجو مي‌کنيم، اگر پيدا شد نتيجه

1 را بر مي‌گرداند و اگر يافت نشد 0 را، براي areEnemies هم به‌ همين طريق عمل مي‌کنيم با اين تفاوت که به‌ جاي گشتن دوست‌ها، دشمن‌ها را جستجو مي‌کنيم. براي زماني‌که دو فرد در فهرست موجود بودند با توجه به کد عمليات مانند بالا عمل خواهيم کرد.

نمونه کد برنامه را از طريق لينک زير دريافت کنيد:

http://tinyurl.com/click287prog

امير بهاالدين سبط‌الشيخ

چهار راه برای رسیدن به آرامش:
1.نگاه کردن به عقب و تشکر از خدا  2.نگاه کردن به جلو و اعتماد به خدا  3.نگاه کردن به اطراف و خدمت به خدا  4.نگاه کردن به درون و پیدا کردن خدا

پل ارتباطی : samsamdragon@gmail.com

تالارهای تحت مدیریت :

مطالب عمومی کامپیوتراخبار و تکنولوژی های جدیدسیستم های عاملنرم افزارسخت افزارشبکه

 

دوشنبه 7 تیر 1389  1:04 PM
تشکرات از این پست
hamidyadaei
hamidyadaei
کاربر تازه وارد
تاریخ عضویت : شهریور 1387 
تعداد پست ها : 35
محل سکونت : تهران

پاسخ به:صلح به زبان الگوريتم

کاش همه چیز اینقدر ساده قابل بیان و نوشتن بود
سه شنبه 8 تیر 1389  3:30 PM
تشکرات از این پست
دسترسی سریع به انجمن ها