כותב |
|
kide devil אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 04 June 2006 בשעה 01:23 | | IP רשוּם
|
|
|
|
שלום אנשים. אני צריך עזרה קטנה, לא מזמן נסיתי לכתוב פותר סודוקו, ז"א שהמשתמש יכניס רת מיקום המספרים שקיימים אצלו ולאחר מכן המחשב-האלגוריתם ימצא את המספרים החסרים-חשבתי על עיקרון של BF, ז"א כמה מצביעים שיעלו כל פעם במספר אחד בעזרת לולאה. עכשיו נתקלתי בכמה בעיות, מישהו יוכל לעזור לי? הבעיות: *לגרום שהאלגוריתם (לולאות) לא יגעו במספרים שהמשתמש הכניס,לא ישנו את הערך שלהם. נכון אפשר עם כמה פעולות IF, אבל יש כמה בעיות, אתה לא יודע כמה ערכים המשתמש מכניס.
*בזמן הבדיקה צריך כ-9 לולאות, עכשיו עזבו שזה כאב ראש כל המשתנים, זה לא יעיל,וכמעט בלתי אפשרי. המשתנה האחרון במערך הדו מימדי אמור לעלות ראשון ב - 1 עכשיו נתקלתי כאן בכמה בעיות.
* זה אפשרות, לא חובה אבל דיי יעזור. הרי בסודוקו אין אפשרות שיהיה באותה שורה\עמודה\ריבוע את אותו המספר, לכן אם יש אפשרות כזאת אפשר לפסול את כל הלולאה,זה יקצר את הקוד מאוד, אבל איך ב-C אני סוגר את הלולאה הראשונה?
תודה.
|
חזרה לתחילת העמוד |
|
|
אור_ג משתמש מתחיל
הצטרף / הצטרפה: 28 May 2006 מדינה: Israel
משתמש: מנותק/ת הודעות: 32
|
נשלח בתאריך: 04 June 2006 בשעה 11:15 | | IP רשוּם
|
|
|
|
מה שאתה צריך זה לעשות פוינטר קבוע שיהיה על המספרים שהמשתמש מכניס כדי שהם לא יישתנו. כל פעם שהמשתמש מכניס ערך, אותו הערך נהיה פוינטר קבוע, והוא שמור גם בתור משתנה אחר. כל פעם שמשתנים הערכים בסודוקו אתה יכול לבדוק אם הערך שונה.
שמע, תתייחס לכל חלק בסודוקו בצורה נפרדת, שורה היא שורה, ריבוע הוא ריבוע וטור הוא טור, ולכל איבר בסודוקו תעשה פונקציה - פונקציה לשורה, פונקציה לטור ופונקציה לריבוע.
וכדי לצאת מלולאה, תשתמש ב break
|
חזרה לתחילת העמוד |
|
|
devil kide אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 05 June 2006 בשעה 22:56 | | IP רשוּם
|
|
|
|
את הפקודה break אני מכיר, אבל איך אני סוגר את הלולאה הראשונה(לולאות מקוננות).
יש סיכוי שקצת יותר תפרט, פשוט הבנתי את מה שאמרת בגדול, לא ממש עזר לי, תודה בכל מקרה.
|
חזרה לתחילת העמוד |
|
|
אור_ג משתמש מתחיל
הצטרף / הצטרפה: 28 May 2006 מדינה: Israel
משתמש: מנותק/ת הודעות: 32
|
נשלח בתאריך: 06 June 2006 בשעה 12:33 | | IP רשוּם
|
|
|
|
אוקיי. פוינטר קבוע - פוינטר שהערך שלו יכול להשתנות אבל הכתובת לא משתנה (הוא תמיד מצביע על אותו המקום). לאחר שאתה מקבל ערך מסוים, תקבע עליו פוינטר קבוע: cin >> A int * const pointer = &A
אתה יכול לשנות את הערך, אבל אתר לא יכול לגרום לפוינטר להפסיק להצביע על אותו המקום. או שאתה יכול גם cin >> A const int * pointer = &A
ואז אי אפשר לשנות את הערך של A (נראה לי שזה מה שאתה צריך)
מה שהתכוונתי בזה שאמרתי שתתייחס לכל חלק בנפרד, זה שאתה צריך להפעיל הרבה פונקציות במקביל כל פעם שנכנס ערך חדש. לבנות פונקציה שבודקת טורים, פונקציה שבודקת שורות, וכו' ואז להריץ אותן כל פעם שערך משתנה.
איזה סוג הלולאות? אם הbreak לא עובד, פשוט תנסה לשנות את התנאי של הלולאה. נגיד: while (!A) { cin >>stuff if (stuff >6) a=1 {
|
חזרה לתחילת העמוד |
|
|
devil אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 09 June 2006 בשעה 12:16 | | IP רשוּם
|
|
|
|
אני כבר מתחיל לתפוס כיוון, תודה.
|
חזרה לתחילת העמוד |
|
|
Fate פורומיסט על
הצטרף / הצטרפה: 25 October 2005
משתמש: מנותק/ת הודעות: 571
|
נשלח בתאריך: 09 June 2006 בשעה 19:57 | | IP רשוּם
|
|
|
|
אלגוריתם פתירת סודוקו לא אמור להיות Brute Force... אתה אמור לעשות חישובים ולא לנסות את כל האפשרויות הקיימות... :-/
|
חזרה לתחילת העמוד |
|
|
Nameless אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 09 June 2006 בשעה 23:31 | | IP רשוּם
|
|
|
|
אם אתם צריכים דוגמאות
http://www.sudokusolver.co.uk/
http://www.sudokusolver.co.uk/step.html
|
חזרה לתחילת העמוד |
|
|