PDA

مشاهده نسخه کامل : نحوه اصلاح لیست فعالیت براساس روابط اولویت در سی شارپ



afsane/68
14-06-15, 18:49
سلام
فرض کنید لیستی از فعالیت به صورت تصادفی تولید شده و می‌خواهیم این فعالیت‌ها در لیستی جدید براساس روابط اولویتی که در یک ماتریس بعنوان داده وارد شده قرار بگیرند. به عنوان مثال:

لیست تصادفی تولید شده:۴۵۳۱۰۲(۶ فعالیت از صفر تا ۵ داریم که تصادفی در یک لیست قرار گرفتند)
ماتریس روابط اولویت:
0 0 0 0 0 0
0 0 0 0 0 1
0 0 0 0 0 1
0 0 0 0 1 0
0 0 0 1 0 0
0 1 1 0 1 0
( فعالیت ۰ پیشنیاز ندارد. فعالیت ۱ و ۲ پیشنیازشان ۰ است. فعالیت ۳ پیشنیازش ۱ است. پیشنیاز ۴ فعالیت ۲و پیشنیاز ۵ فعالیت های ۱و۳و۴ است)

لیست جدیدی داریم که می خواهیم به این شکل پر شود که در لیست بالا فعالیتی که هیچ پیشنیازی ندارد وارد لیست جدید می‌شود(فعالیت ۰) ، بعد دوباره از اول لیست یعنی فعالیت ۴ بررسی صورت می‌گیرد و فعالیتی که پیشنیازش در لیست نیس انتخاب می‌شود یعنی فعالیت ۱ دوباره از اول لیست شروع می‌شود فعالیت ۳ پیشنیازش در لیست اول وجود ندارد پس انتخاب شده به لیست جدید وارد می شود. این مراحل تکرار می شود تا دیگر لیست اول خالی شود و لیست جدید به این شکل پر شده است: ۰۱۳۲۴۵

چطوری میتونم اکد این رویه را با کنسول بنویسم.
اگر میشه راهنمایی کنید.
ممنون.

ravegoat
19-06-15, 23:22
با سلام!

طبق توضیحات پیشین شما ابتدا یک آرایه ی دو بعدی از نوع Boolean تعریف کنید و روابط اولویت ها را براساس اون شکل بدید.
سپس بیایید کارکتر به کارکتر لیست تصادفی تولید شده رو فرخوانی کنید.
براساس هر کارکتر خونده شده که نماینده ی یک وظیفه است، سطر متناظر رو از ماتریس اولویت ها بخونید.
در این سطر به ازای هر درآیه که مقدار 1 یا True داشته باشد، باید اندیس متناظر آن را در لیست جدید فعالیت ها جست و جو کنید (بدیهی است این لیست در ابتدا خالی است.) .
اگر این اندیس در لیست وجود نداشته باشد، باید در ماتریس اولویت ها سطر متناظر این اندیس را مطابق عبارت خط بالا بررسی کنید.
این روند تا جایی ادامه می یابد تا در ماتریس اولویت ها به سطری برسیم که هیچ پیشنیازی نداشته باشد.
در نهایت اندیس سطر های پیشنیاز ها را از انتها به ابتدا در لیست جدید وارد می کنیم.
الگوریتم زمانی به پایان می رسد که رویه برای کلیه ی کارکتر های لیست تصادفی تکرار شود.

موفق باشید
آرمین