【数据结构】队列的应用-舞伴配对问题

舞会的舞伴配对问题:

某单位举办周末友谊舞会,在舞会上,男、女各自排成一队。舞会开始时,依次从男队和女队的队头各出一人配成舞伴。如果两队初始人数不等,则较长的那一队中未配对者等待下一轮舞曲。假设初始男、女人数已经固定,舞会的轮数表示舞曲数。试模拟解决上述舞伴配对问题。

核心代码:

void PartnerPairing(CQueue &Qm,CQueue &Qw,int Rotation){
    int n,m,Min;
    m=(Qm.Rear-Qm.Front+Maxn)%Maxn;
    n=(Qw.Rear-Qw.Front+Maxn)%Maxn;
    printf("%d  %d\n",n,m);
    Min=m<n?m:n;
    QElemType man,woman,dancer;
    for(int i=0;i<Rotation ;i++){
        for(int j=0;j<Min;j++){
            DeQueue(Qm,man);DeQueue(Qw,woman);
            cout<<man.name<< "<----->"<<woman.name<<endl;
            EnQueue(Qm,man);EnQueue(Qw,woman);
        }
        m>n?GetHead(Qm,dancer):GetHead(Qw,dancer);
        cout<<"Next Round Dancer : " <<dancer.name<<endl;
    }
}

完整的调试代码:

#include<string>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#define Maxn 100
#define QueueSize 100
using namespace std;
typedef struct QElemType{
    string name;
    int age ;
    QElemType(string t="Bin",int Age=20){
        name=t;age=Age;
    }
}QElemType;
typedef struct {
    QElemType *base;
    int Front ,Rear;
}CQueue;
void InitQueue(CQueue &Q){
    Q.base = new QElemType [ QueueSize ];
    Q.Front = Q.Rear = 0;
}
void EnQueue(CQueue &Q,QElemType e){
    Q.base[Q.Rear]=e;
    Q.Rear=(Q.Rear+1)%Maxn;
}
void DeQueue(CQueue &Q,QElemType &e){
    if(Q.Front==Q.Rear){
        printf("error !!! Queue is empty !!!\n");return ;
    }
    e=Q.base[Q.Front++];
    Q.Front=Q.Front%Maxn;
}
void GetHead(CQueue &Q,QElemType &e){
    if(Q.Front==Q.Rear){
        printf("error !!! Queue is empty !!!\n");return ;
    }
    e=Q.base[Q.Front];
}
void PartnerPairing(CQueue &Qm,CQueue &Qw,int Rotation){
    int n,m,Min;
    m=(Qm.Rear-Qm.Front+Maxn)%Maxn;
    n=(Qw.Rear-Qw.Front+Maxn)%Maxn;
    printf("%d  %d\n",n,m);
    Min=m<n?m:n;
    QElemType man,woman,dancer;
    for(int i=0;i<Rotation ;i++){
        for(int j=0;j<Min;j++){
            DeQueue(Qm,man);DeQueue(Qw,woman);
            cout<<man.name<< "<----->"<<woman.name<<endl;
            EnQueue(Qm,man);EnQueue(Qw,woman);
        }
        m>n?GetHead(Qm,dancer):GetHead(Qw,dancer);
        cout<<"Next Round Dancer : " <<dancer.name<<endl;
    }
}
int main()
{
    int n,m,Rotation;
    QElemType  man,woman;
    CQueue Qm,Qw;
    InitQueue(Qm),InitQueue(Qw);
    printf("请输入舞会 男舞者,女舞者各人数: \n");
    cin>>n>>m;
    printf("请输入%d位男舞者的名字和年龄\n",n);
    for(int i=0;i<n;i++){
        printf("第%d位 男舞者 name , age \n",i+1);
        cin>>man.name>>man.age;
        EnQueue(Qm,man);
    }
    printf("请输入%d位女舞者的名字和年龄",m);
    for(int i=0;i<m;i++){
        printf("第%d位 女舞者 name , age \n",i+1);
        cin>>woman.name>>woman.age;
        EnQueue(Qw,woman);
    }
    printf("请输入需要多少轮舞会: ");
    scanf("%d",&Rotation);
    PartnerPairing(Qm,Qw,Rotation);
    return 0;
}

 

    原文作者:舞伴问题
    原文地址: https://blog.csdn.net/Z_sea/article/details/85199883
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞