سیارهی آلفا
در سیارهی آلفا که اخیراً کشف شده، $ m×n$ کشور وجود دارد. اطلاعات زیر دربارهی این کشورها کشف شده است:
هر کشور با یک زوجِ مرتب از اعداد طبیعی بهصورت $(i,j)$ که $1≤j≤n$ و $1≤i≤m$ نامگذاری شده است.
دو کشور $(i_1,j_1)$ و $(i_2,j_2)$ به هم جاده دارند، اگر و تنها اگر:
$i_1=i_2$ و$|j_1-j_2|=1$.
و یااینکه $i_1=i_2$ و $|j_1-j_2|=n-1$.
و یا اینکه $j_1=j_2$ و $|i1-i2|=1$.
و یا اینکه $j_1=j_2$ و $|i_1-i_2|=m-1$.
(در واقع هر کشوری به چهار کشورِ دیگر جاده دارد.)
دو جهانگرد قصد دارند با شروع از یک کشورِ دلخواه، هر کدام سفری را به تمامِ کشورها انجام دهند و از هر کشوری در طول سفر دقیقاً یکبار عبور کنند و سرانجام به کشور شروعِ سفر بازگردند. اما آن دو به دلایلی مایل نیستند از هیچ جادهای که قبلاً جهانگردِ دیگر از آن عبور کرده و یا در حال عبور است،عبور کنند.
ثابت کنید این دو نفر همواره میتوانند سفرهای خود را با موفقیت برنامهریزی کنند و به انجام برسانند.
در شکل زیر، ۳ مثال برای حالتهای $m=3$,$n=3$ و $m=3$,$n=4$ و $m=4$,$n=4$ کشیده شده است. خطوطِ نقطهچین مسیر سفر یکی و خطوطِ پررنگ مسیر سفر جهانگردِ دیگر است. در هر شکل، شهر $(i,j)$ در سطر $i$ و ستون $j$ قرار دارد.
پاسخ
در اول نقشه کشور ها را با یک گراف شبکه (گرافی که رأس های آن نقاط شبکهاند) $ m×n$ مدلسازی میکنیم. یعنی هر کشور یک نقطه و هر جاده هم یک یال بین دو نقطه متناظر است. سفر مورد نظر جهانگردان نیز یک دور همیلتونی (دوری شامل تمامی نقاط شبکه) است. طبق گفته صورت سوال ما به دنبال پیدا کردن $2$ دور همیلتونی با یالهای مجزا هستیم.
تعریف:
یک یال را یال خوب سطر $i$ مینامیم اگر و تنها اگر این یال بین دو نقطه $(i,j_1)$ و $(i,j_2)$ کشیده شده و نیز $|j_1-j_2|=n-1$ باشد.
یک یال را یال خوب ستون $j$ مینامیم اگر و تنها اگر این یال بین دو نقطه $(i_1,j)$ و $(i_2,j)$ کشیده شده و نیز $|i_1-i_2|=m-1$ باشد.
نکته: فعلا حالت $n$ فرد و $m$ زوج از مسئله را حل نمیکنیم.
حال روی $n$ با گام $2$ تایی استقرا میزنیم.
$ \Leftarrow $
زوجیت $n$ در حین استقرا ثابت میماند و نیز $m$ هم همیشه در حین استقرا ثابت است.
ساخت اولین دور همیلتونی: برای اینکار یالهای $m_0 \times n_0$ وسطی را منطبق با دور خوب در نظر میگیریم. در ادامه یالهای $(m_0,2) \leftrightarrow (m_0,1)$ و $(m_0,n_0+1)\leftrightarrow (m_0,n_0+2)$ را برای دور انتخاب میکنیم. سپس یال های غیر خوب ستون اول و آخر و نیز یال $(1,1)\leftrightarrow (1,n_0+2)$ را هم انتخاب میکنیم. گفتیم که یالهای خوب سطری موجود در فرض استقرا را باید از $m_0 \times n_0$ وسطی حذف کنیم. با توجه به اینکه دور خوب فقط یک یال خوب سطری داشت (آنهم در سطر آخر)، پس با حذف این یال کار را تمام کرده و دور به طور کامل انتخاب میشود. حال با توجه به اینکه یال های $m_0 \times n_0$ وسط یک دور همیلتونی تشکیل میدادند، دور جدید نیز همه نقاط $m_0 \times n_0$ وسط را دیده و نیز تمامی نقاط دو ستون اول و آخر را هم میبیند پس این دور، دور همیلتونی است.
ساخت دومین دور همیلتونی: در اول یال های گراف شبکه $m_0 \times n_0$ وسط را منطبق با دور ناخوب اتخاب میکنیم. دقت کنید که درجه هر راس در هر دور همیلتونی $2$ است پس باید تمامی $4$ یال متصل به هر راس در اجتماع $2$ دور همیلتونیهای مجزا وجود داشته باشد، پس با توجه به اینکه دور خوب دقیقا یک یال خوب دارد و در دور همیلتونی دیگر این گراف شبکه (دور ناخوب) باید تمامی یالهای خوب ناموجود در دور خوب، وجود داشته باشد پس $m_0-1$ یال خوب سطری به ترتیب در سطرهای $1,2,3...,m_0-1$، در دور ناخوب وجود دارد. گقته بودیم که یالهای خوب سطری دور های همیلتونی فرض استقرا باید از شبکه $m_0 \times n_0$ وسطی دورمان حذف شوند. پس بجای یال خوب سطر $i$ ام در شبکه $m_0 \times n_0$ وسط ، $3$ یال $\lbrace (i,1) \leftrightarrow (i,2) , (i,1)\leftrightarrow(i,n_0+2) , (i,n_0+1)\leftrightarrow(i,n_0+2) \rbrace $ را برای دورمان اتخاب میکنیم. بجز برای $i=1$ و $i=m_0$ که یال های مورد نیاز در این دو حالت را جداگانه اضافه میکنیم. در حالت $i=1$ به خاطر اینکه یال خوب این سطر در اولین دور همیلتونی که ساختیم استفاده شده، پس فقط دو یال $\lbrace (i,1) \leftrightarrow (i,2) , (i,n_0+1)\leftrightarrow(i,n_0+2) \rbrace $ را انتخاب کرده و به جای یال خوب سطر $1$ یال های خوب ستونهای $1$ و $n_0+2$ را انتخاب میکنیم. برای $i=m_0$ هم دو یال $\lbrace (m_0,1) \leftrightarrow (m_0,2) , (m_0,n_0+1)\leftrightarrow(m_0,n_0+2) \rbrace $ در ساخت دور همیلتونی$2$ استفاده شدهاند، پس در این حالت با توجه به اینکه یال های خوب ستون های اول و آخر در حالت قبل برای دور اتخاب شدهاند، ما فقط یال خوب سطر $m_0$ را اضافه میکنیم و بدین ترتیب ساخت دورمان تمام میشود و با توجه به نحوه چینش یالها و فرض استقرا مجموعه یال های این دور یک دور همیلتونی را تشکیل میدهند.
مجزا بودن: با کمی دقت متوجه میشوید که یال های دور همیلتونی$2$ مجزا از یال های دور همیلتونی $1$ اند. زیرا طبق فرض استقرا و با توجه به نحوه ساخت دورها، تمامی یال های انتخاب شده در گراف شبکه $m_0 \times n_0$ وسط در این دو دور همیلتونی از هم مجزااند و نیز یال هایی که ما در گام استقرا اضافه کردیم هم از هم مجزااند.
کامل شدن فرض استقرا: حال در ساخت دور همیلتونی$1$ از یک یال خوب سطری استفاده شد که این یال، یال خوب سطر اول است. پس برای برآورده شدن کامل فرض استقرا باید دو گراف شبکه و دور همیلتونیها را نسبت به خط افق تقارن دهیم تا یال خوب سطری، سطر اول تبدیل به یال خوب سطری، سطر آخر شده و نیز دو دور همیلتونی مجزا بمانند.
در طی گام استقرا زوجیت $m$ و $n$ حفظ میشود پس هیچ وقت از فرض استقرا برای گراف شبکه $m_0 \times n_0$ ای که $n$ فرد و $m$ زوج باشد، استفاده نشده و استقرا درست است.
حال برای بدست آوردن دور های همیلتونی برای گراف شبکه $m \times n$ای که $n$ فرد و $m$ زوج باشد، جواب برای گراف شبکه $n \times m$ را درنظر بگیرید (چون تعداد ستون ها زوج است، وجود دارد). نقطه $(i,j)$ را به نقطه $(j,i)$ تناظر داده و نیز یالهای بین نقاط در حالت اولیه را تبدیل به یالهایی بین نقاط متناظر کنید. بدین ترتیب دور ها مجزا و همیلتونی میمانند پس جواب برای این حالت نیز بدست میآید.