【问题描述】周末舞会上,男生和女生们分别进入舞厅,各自排成一队。假设每首舞曲只能有一名男生一名女生跳舞,跳舞开始,依次从男队和女队队头各取一人配成舞伴,若两队初始人数不同,则较长那一队未配对者等待下一轮舞曲。配对成功的舞伴跳完舞排回各自队伍的最后。现要求写一算法模拟上述舞伴配对问题。
【输入形式】第一行输入两个整数n和k,n(n
【输出形式】成功配对则依次输出每首舞曲配对跳舞的男生姓名和女生姓名,姓名之间以空格分隔,不能成功配对(男生队或女生队无人)则输出“error”。
【样例输入1】
5 5
Tom m
John m
Alice f
Jenny f
Mary f
【样例输出1】
Tom Alice
John Jenny
Tom Mary
John Alice
Tom Jenny
#include
#include
#define ERROR 0
#define OK 1
#define MAXQSIZE 1000
typedef struct {
char name[20];//姓名
char sex;//性别
}Person;
typedef Person ElemType;
typedef struct
{
ElemType *base;
int front;
int rear;
}SqQueue;
int InitQueue(SqQueue *Q)
{
Q->base=(ElemType *)malloc(MAXQSIZE*sizeof(ElemType));
if(!Q->base)
return ERROR;
Q->front=Q->rear=0;
return OK;
}/*InitQueue*/
/*队列长度*/
int QueueLength(SqQueue *Q)
{
return (Q->rear-Q->front+MAXQSIZE)%MAXQSIZE;
}/*QueueLentgh*/
/*入队*/
int EnQueue(SqQueue *Q,ElemType e)
{
if((Q->rear+1)%MAXQSIZE==Q->front)
return ERROR;
Q->base[Q->rear]=e;
Q->rear=(Q->rear+1)%MAXQSIZE;
return OK;
}/*EnQuese*/
/*出队*/
int DeQueue(SqQueue *Q,ElemType *e)
{
if(Q->front==Q->rear)
return ERROR;
*e=Q->base[Q->front];
Q->front=(Q->front+1)%MAXQSIZE;
return OK;
}/*DeQueue*/
/*判队列是否为空*/
int QueueEmpty(SqQueue *Q)
{
if(Q->front==Q->rear)
return OK;
else
return ERROR;
}/*QueueEmpty*/
/*取对头*/
int GetHead(SqQueue *Q,ElemType *e)
{
if(Q->front==Q->rear)
return ERROR;
*e=Q->base[Q->front];
return OK;
}/*GetHead*/
/*释放队列*/
int DestroyQueue(SqQueue *Q)
{
if(Q->base)
{
Q->rear=Q->front=0;
free(Q->base);
}
return OK;
}/*DestroyQueue*/
int dancePartner(int n, int k)
{
Person m, f, s;
SqQueue Qm, Qf;
if (!InitQueue(&Qm) || !InitQueue(&Qf))
return ERROR;
int i, j;
for (i = 0, j = 0; i
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net