đề bài: hoán vị n người sao cho 2 người ghét nhau không đứng cạnh nhau,
với 1 dữ liệu lấy từ tệp txt có dạng: dòng 1 ghi số người (n) , từ dòng 2 lưu ho tên, từ dòng n+1 lưu tên 2 người ghét nhau.em đã viết nhưng chạy không ra sao cả. anh giúp em với nhé. mai phải nộp bài rùi.anh cố gắng giúp nhé.thanks anh trước
cái tệp cccc.txt đó có dạng
4
nguyen van a
nguyen van b
nguyen van c
nguyen van d
a b
a d
dưới đây là bài em đã viết
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
int kt=1;
typedef struct zzzz
{
int so;
char ht[30];
} ;
void doc(char tentep[30],int &n,zzzz a[10])
{
FILE *f;
int i,j;
char st[100];
int b[100];
f=fopen(tentep,"rt");
if(f==NULL)
{
printf("ko co");
getch();
return;
}
fscanf(f,"%d",&n);
printf("%d",n);
i=1;

while (fgets(st,30,f))
{
i++;
printf("%s\n",st);
strcpy(a[i].ht,st) ;

}
rewind(f);
for(i=1;i<=n;i++)
a[i].so=i;
fclose(f);
}
void ht(int n,zzzz a[10])
{
int i;
char st[100];
for(i=1;i<=n;i++)
{
printf("%3d %s",a[i].so,a[i].ht);
// strcpy(a[i].ht,st);
}
}
void sinh(zzzz a[10], int n)
{ int i,tg,t,k,d,c,j;
i=n-1;
char tg2[20];
while((i>=1)&&(a[i].so>a[i+1].so)) i--;
if(i<1)kt=0;
else
{
k=n;
while((a[k].so<a[i].so)) k--;
tg=a[i].so; a[i].so=a[k].so; a[k].so=tg;
strcpy(tg2,a[i].ht);
strcpy(a[i].ht,a[k].ht);
strcpy(a[k].ht,tg2);
d=i+1;
c=n;
while(d<c)
{
t=a[d].so; a[d].so=a[c].so; a[c].so=t;
strcpy(tg2,a[d].ht);
strcpy(a[d].ht,a[c].ht);
strcpy(a[c].ht,tg2);
d=d+1;
c=c-1;
}
}
}

void main()
{
clrscr();
int n,i,j;
zzzz a[10];
doc("E:\\cccc.txt",n,a);
ht(n,a);
while (kt==1)
{
ht(n,a);
sinh(a,n);
}

getch();

}