(השתמשתי בקוארדינטות 6,2 עד 6,3)
א. check2 - למה אתה מאתחל אותו במאלוק אם אחרי זה אתה מאתחל את str בפונקציית הרקורסיה?
ב. למה להשתמש בכלל ב-malloc מלכתחילה למכרוזת קבועה? הרבה יותר נכון להשתמש ב-typedef enum במקרה הזה ולא לזרוק מכיוון אחד לשני זכרונות מוקצים שאח"כ גם לא משוחררים ע"י FREE.
ג. שים לב שאתה אף פעם לא נכנס לסקופ של if (y == y_end && x == x_end) (ולכן אתה מנסה להדפיס NULL ומקבל ריסוק).
ד. וזו הסיבה האמיתית - הקוד פשוט לא פועל נכון ולא עושה מה שהתכוונת אליו.
הוא בודק כל פעם צד ימינה, צעד מעלה, צעד שמאלה, צעד למטה (לאו דווקא בסדר הזה) ומסמן נקודה במקום הרווח.
אבל מי אמר שאם תלך למעלה הפעם אתה לא תחסום לעצמך את הדרך חזרה לדרך ללא מוצא?
אתה בעצם רצית שהתוכנית תמצא פתרון מינימלי או פתרון כלשהו?
הטריק האמיתי הוא לא לעשות מה שעשית (לסמן נקודה במקום הרווח) אלא להשאיר רווח. תן לו לטעות כמה פעמים בדרך - אבל גם תאפשר לו ללכת אחורה כשהוא טועה.
בסוף בטוח הוא יגיע לפתרון (בהנחה שבאמת יש פתרון כזה).
אתה יכול לתת תנאי עצירה גם שימנע מהקוד לעבור על קוארדינטות ההתחלה יותר מ-8 פעמים (אלכסונים, מאונך ומאוזן), אבל עדיין זה לא קוד אופטימלי.אני לפני כמה חודשים פירסמתי פה קוד שעובד בשיטת ה-backtracking שידפיס לך את המסלול האופטימלי מנקודה א' לב'.
השיטה היא כל פעם לשלוח לו לוח מאותחל לצעד האחרון שילך ל-4 כיוונים אפשריים (בהנחה שלא עברת עליהם).
תנסה לחפש אותו, בעיניי זה יתן לך כיוון למה בעצם צריך רקורסיה פה בכלל
בברכה,
עידן