PDA

View Full Version : سوال: رفع ارور منطقي از برنامه nوزير به زبان c



mosafer.zendegi
یک شنبه 05 دی 1389, 15:10 عصر
دوستان گرامي سلام:لبخندساده:
هر جا هستين اميدوارم دلتون شاد،لبتون خندون و ايام به كامتون اگه نيست "توي آسمون از يه ارتفاعي به بالا ديگه ابري نيست پس اگه آسمون دلت ابري شد با ابرها نجنگ و سعي كن اوج بگيري".
غرض از مزاحمت:برنامه nوزير و نوشتم كه خطاي منطقي داره:ناراحت:ديگه مخم قد نميده،منطق برنامه ام درسته اما چون خيلي وقته برنامه نويسي نكردم الان دچار مشكل شدم .اينه كه اومدم ببينم اينجا كسي هست به داد دل ما برسه؟!:گیج:

برنامم با استفاده از آرايه پويا براي درنظر گرفتن تعداد وزيرها و ليست پيوندي براي ايجاد صف و در كل از منطق اول سطح استفاده ميكنه.اميدوارم كسي بتونه كمكم كنه.خودمم دارم روش كار ميكنم،اميدوارم خيلي زود بفهمم اشكالش چي بوده:لبخندساده:شايد خيلي آسون باشه اما در حال حاظر تمركز ذهن ندارم:خجالت:

اين كد برنامم هستش:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<math.h>
int n;
typedef struct saf * link;
struct saf
{
int *array;
link next;
}*front,*rear;
int equal(int *p,int *rear);
int check(saf *rear);
////////////////////////////////////////////////////
int equal(int *array1,saf *array2){
while(array2){
for(int i=0;i<n;i++)
if((array1[i])!=(array2->array[i]))
break;
if(i>=n)
return(0);
array2=array2->next;
}
return(1);
}
/////////////////////////////////////////
int check(saf *rear1){
int p=0;
for(int i=0;i<=n;i++){
for(int j=i+1;j<n;j++){
if(rear1->array[i]==rear1->array[j])
return(1);
if(abs(i-j)==abs(rear1->array[i]-rear1->array[j]))
return(1);
}
}
return(0);
}
/////////////////////////////////////////
int main()
{
clrscr();
int *p;
printf("Enter number of queens:");
scanf("%d",&n);
p=(int *)malloc(sizeof(int)*n);
if(!p)
{
printf("aloocation failure!");
getch();
exit(1);
}
for(int i=0;i<n;i++)
{
scanf("%d",&p[i]);
// *(p+i)=1;
// printf("%3d",*(p+i));
}
saf node1;
node1.array=p;
node1.next=NULL;
rear=front=&node1;
while(1){
for(i=0;i<n;i++){
for(int j=1;j<=n;j++){
p=(int *)malloc(sizeof(int)*n);
for(int k=0;k<n;k++)
p[k]=rear->array[k];
p[i]=j;
if(equal(p,rear)){
saf q;
q.array=p;
q.next=NULL;
front->next=&q;
front=front->next;
front->next=NULL;
for(int m=0;m<n;m++)
printf(" %d :: ",q.array[m]);
}
else
free(p);
printf("\n");
}
printf("\n\n");getch();
}
if(!check(rear)){
printf("\n found\n");
for(i=0;i<n;i++)
printf("%-5d",rear->array[i]);
getch();
exit(0);
}
}
getch();
return 0;
}