64,573
社区成员
发帖
与我相关
我的任务
分享
typedef struct tagStudent
{
int nID;
int nWanna[2];
int nFinalID;
struct tagStudent * pFlink;
struct tagStudent * pBlink;
}STUDENT,*PSTUDENT;
int GetData(PSTUDENT & pStudent)
{
FILE *fp;
int nAmount;
fp = fopen("fire.in","r");
fscanf(fp,"%d\n",&nAmount);
pStudent = (PSTUDENT)malloc(nAmount*sizeof(STUDENT));
for(int i=0;i<nAmount;i++)
{
pStudent[i].nID = i+1;
fscanf(fp,"%d %d\n",pStudent[i].nWanna[0],pStudent[i].nWanna[1]);
}
fclose(fp);
return nAmount;
}
inline int CheckWanna(PSTUDENT & pStudent,int nIndex,int nWanna)
{
if((pStudent[nIndex-1].nWanna[0]!=nWanna)&&
(pStudent[nIndex-1].nWanna[1]!=nWanna))
{
return 0;
}
else
{
return 1;
}
}
inline void Link(PSTUDENT & pStudent,int nFlink,int nBlink)
{
pStudent[nFlink].pBlink = &pStudent[nBlink];
pStudent[nBlink].pFlink = &pStudent[nFlink];
if(pStudent[nFlink].nWanna[0]==(nBlink+1))
{
pStudent[nFlink].nWanna[0] = 0;
}
else
{
pStudent[nFlink].nWanna[1] = 0;
}
}
int GetFinal(PSTUDENT & pStudnet,int nAmount)
{
int i=0;
for(int nTimes=0;nTimes<nAmount;nTimes++)
{
if(CheckWanna(
pStudnet,
pStudnet[i].nWanna[0],
i+1 ))
{
Link(pStudnet,pStudnet[i].nWanna[0]-1,i);
i = pStudnet[i].nWanna[0];
pStudnet[i].nWanna[0] = 0;
}else
if(CheckWanna(
pStudnet,
pStudnet[i].nWanna[1],
i+1 ))
{
Link(pStudnet,pStudnet[i].nWanna[1]-1,i);
i = pStudnet[i].nWanna[1];
pStudnet[i].nWanna[1] = 0;
}else
return 0;
}
PSTUDENT pStudentNow = pStudent;//这里提示未声明的标识符
for(int nTimes=0;nTimes<nAmount;nTimes++)
{
pStudentNow->nFinalID = nTimes+1;
pStudentNow = pStudentNow->pFlink;
}
return 1;
}
int _tmain(int argc, _TCHAR* argv[])
{
PSTUDENT pStudnet;
int nAmount = GetData(pStudent);//这里提示未声明的标识符
if(!GetFinal(pStudent,nAmount))//这里提示未声明的标识符
{
printf("-1");
return 0;
}
system("pause");
return 0;
}