עבור לתוכן

רקורסיה ו - Backtracking ב - JAVA

Featured Replies

פורסם

שלום.

אשמח לעזרה במימוש הקוד הבא: ישנה מערכת תאורה שמכילה n נורות שמסודרות בשורה אחת ליד השניה. כל נורה יכולה להיות באחד משני מצבים – דולקת או כבויה.

הנורות מחוברות בניהן כך שאם משנים את המצב של נורה במקום ה-i אזי גם המצב בנורות במקומות i-1 ו- i+1 משתנה.

אני צריך לייצג את הנורות במערך של משתנים בוליאנים, כאשר true מייצג נורה דולקת ו-false מייצג נורה כבויה.

השיטה הבאה מקבלת כפרמטרים שני מערכים בוליאנים באותו הגודל שמייצגים מצב של נורות כמתואר בתחילת השאלה. השיטה צריכה להחזיר true אם ניתן ברצף פעולות כלשהו להעביר את הנורות מהמצב from למצב to. אם אין אפשרות כזאת, השיטה תחזיר false.

public class Backtracking {

Backtracking b = new Backtracking();

public boolean isSwitchPossible(boolean[] from, boolean[] to)
{
if(from == to);
{
return true;
}
if(from != to);
{
return false;
}
}
}

אני יודע שהמבנה לא תקין והקוד לא עובד. אשמח לעזרה באיך לממש אותו בצורה נכונה.

פורסם

כמו שהשם מרמז -- אתה צריך להשתמש בפתרון הנאיבי-הרקורסיבי

כלומר, אתה צריך לנסות לעשות "צעד" אחד - ואז לראות האם מהצעד הזה אפשר להגיע לפתרון

איך אתה בודק את זה? עושה עוד קריאה, כשהפרמטר הפעם הוא המערך שבו הערך הראשון השתנה - ובודק האם ממנו אפשר להגיע למטרה

איך אתה בודק את זה? אתה עושה עוד קריאה, כשהפרמטר הפעם הוא המערך שבו הערך הראשו וגם השנו, ובודק האם ממנו אפשר להגיע למטרה..

ככה עד שאתה מגיע לסוף --- ואם במסלול "אחד" לא תצליח, הקוד שלך יחזור "אוטומטית" (בגלל הרקוריסה) אחורה ויגיד לשלב מסויים: "לא הצלחתי".

אותו שלב ינסה לעשות "שינוי אחד קטן" ולראות האם השינוי הזה פותר את הביעה. איך הוא יבדוק? הוא יעשה קריאה ....

ככה עובדת רקורסיה.

אם זה יעזור לך לחשוב על זה --- תנסה לחשוב איך פותרים ככה סודוקו. אני יכול לפתור סודוקו באופן הבא: אני מחפש מקום ריק, ומכניס בו מספר. אני בודק האם הפרתי את החוקים של הסודוקו. לא? אני מוסיף עוד מספר במקום ריק. בודק האם הפרתי את תנאי הסודוקו. לא? מוסיף עוד מספר. וכו'.

עד שהתנאים יופרו. ברגע שהתנאים מופרים אני הולך "צעד אחד אחורה" - ומשנה את המספר שהכנסתי במקור, כך שאם במקור הכנסתי "1" וזה לא עבד, עכשיו אני אנסה "2" ואמשיך הלאה, עד הפעם הבאה שהתנאים יופרו.

זה בדיוק אותו רעיון.

זה הכי הרבה שאני יכול לעזור בלי לתת לך את הפתרון עצמו.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים