ABA


"פתרון לחידת הn מלכות:"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #14572 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 14572
DLN
חבר מתאריך 20.4.07
15884 הודעות, דרג אמינות חבר זה
   17:36   08.02.08   
אל הפורום  
  פתרון לחידת הn מלכות:  
 
  

#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#define n 4
void printboard(int a[n])
{
int b[n][n]={0};
for(int i=0;i<n;i++)
{
b[i][a[i]]=1;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
printf("%d",b[i][j]);
printf("\n");
}
}
int safe(int a[n], int row)
{
for(int i=0;i<row;i++)
{
if ((a[i]-a[row]==0) || (a[i]-a[row]==i-row) || (a[i]-a[row]==row-i))
{
return 0;
}
}
return 1;
}
void nqueens(int a[n], int row)
{
if (row>=n)
{
system("CLS");
printboard(a);
system("PAUSE");
return;
}
for(int i=0;i<n;i++)
{
system("CLS");
printboard(a);
a[row]=i;
if (safe(a,row))
{
nqueens(a,row+1);
}
}
}
void main()
{
int a[n];
for(int i=0;i<n;i++)
a[i]=0;
nqueens(a,0);
system("PAUSE");
}

אגב זה מאוד מאוד איטי בגלל שהחלטתי שזה יהיה מגניב אם זה ידפיס כל מצב ואז בעצם נוצרת כזו הנפשה שממחישה איך זה מוצא פתרונות.
זה באקטראקינג יחסית בסיסי, זה אשכרה מנסה כל דרך עד שהוא מוצא את הפתרון
סיבוכיות O(n^n)
אני חושב...


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  שו הת'ה n מלכות? ולמה הספריה stdafx.h? idan192 08.02.08 20:20 1
     תשובות Net_Boy  08.02.08 20:24 2
         אחלה ואחלה :} תודה idan192 08.02.08 20:37 3
         יעילה לא, אלגנטית כה DLN 08.02.08 20:41 4
             הממ אני לא חקרתי לעומק אבל פעם אחרונה שבדקתי Net_Boy  08.02.08 20:58 5
         Backtracking רחוק מהפיתרון היעיל sHuMpI 06.03.08 14:31 7
  toda - aluf !!! Sagittarius 10.02.08 12:23 6

       
idan192

דרג אמינות חבר זה
   20:20   08.02.08   
אל הפורום  
  1. שו הת'ה n מלכות? ולמה הספריה stdafx.h?  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק, 2 נקודות
   20:24   08.02.08   
אל הפורום  
  2. תשובות  
בתגובה להודעה מספר 1
 
   ערכתי לאחרונה בתאריך 08.02.08 בשעה 20:27 בברכה, Net_Boy
 
1. זו חידה מאד מפורסמת מתחום האלגוריתמיקה ששואלת בכמה דרכים ניתן להציב k מלכות בלוח בגודל N X N ככה שלא יאיימו אחת על השנייה , ובאמת הדרך היעילה לפתור את זה היא Backtracking.

2. הספרייה היא של visual studio ונותנת precompiled headers שעל קצה המזלג זה מאיץ ביצועים בזמן קומפילציה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
idan192

דרג אמינות חבר זה
   20:37   08.02.08   
אל הפורום  
  3. אחלה ואחלה :} תודה  
בתגובה להודעה מספר 2
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
DLN
חבר מתאריך 20.4.07
15884 הודעות, דרג אמינות חבר זה
   20:41   08.02.08   
אל הפורום  
  4. יעילה לא, אלגנטית כה  
בתגובה להודעה מספר 2
 
   ילד מהכיתה שלי הצליח לפתור את זה בO(n²) וזה מוצא (ככה הוא טוען לפחות) את כל הפתרונות היחודיים (כלומר כל אלה שלא סיבובים או היפוכים של השניות)
וחוצמזה יש עוד פתרון שפותר את 100 מלכות בכמה אלפיות שנייה לפי ויקיפדיה
אני חושב שזה גם פשוט באקטראקינג עם מלא מלא מגבלות והתאמות כדי שלא יהיו צעדים מיותרים כמו שעוברים שורה לבדוק גם את הטורים של השורה הקודמת


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק, 2 נקודות
   20:58   08.02.08   
אל הפורום  
  5. הממ אני לא חקרתי לעומק אבל פעם אחרונה שבדקתי  
בתגובה להודעה מספר 4
 
   Backtracking (עם אופטימזציות למיניהן) היה הפיתרון הכי יעיל לזה וכמובן שגם אלגנטי.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
sHuMpI

דרג אמינות חבר זה
   14:31   06.03.08   
אל הפורום  
  7. Backtracking רחוק מהפיתרון היעיל  
בתגובה להודעה מספר 2
 
   בעזרת WalkSAT אפשר לפתור את בעיית N המלכות ב O(N)


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Sagittarius
חבר מתאריך 29.1.17
909 הודעות, דרג אמינות חבר זה
   12:23   10.02.08   
אל הפורום  
  6. toda - aluf !!!  
בתגובה להודעה מספר 0
 
  

"ברוך אלוקים אשר לא הסיר תפילתי וחסדו מאתי" (תהילים סו כ)


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net