| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2428 人关注过本帖
标题:模拟舞伴配对算法出现了些问题,请指教
只看楼主 加入收藏
qweiuy566
Rank: 2
等 级:论坛游民
帖 子:48
专家分:19
注 册:2016-1-27
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:1 
模拟舞伴配对算法出现了些问题,请指教
就是依次配对,这一轮没配上的下一轮先配,队列


#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;

typedef struct Node
{
    int a; //a表示序号
    struct Node *next;
}LNode;

void duilie(int n,int nan,int nv);
void wuhui(int b,int n,LNode *zznan,LNode *zznv);

main()
{
    int  n,nan,nv;

    cout<<"要进行几轮舞会:";
    cin>>n;  //n代表舞会轮次
    cout<<"\n男队的人数为:";
    cin>>nan;
    cout<<"\n女队的人数为:";
    cin>>nv;
    cout<<endl;
    duilie(n,nan,nv);

}
void duilie(int n,int nan,int nv)
{
    int i,b;  //b表示一轮舞会男女各出多少人
    LNode *p,*q,*zznan,*zznv;
    //男队的循环链表 ,以zznan为头结点
    zznan=(LNode*)malloc(sizeof(LNode));
    zznan->a=1;
    zznan=p;
    for(i=1;i<nan;i++)
    {
        q=(LNode*)malloc(sizeof(LNode));  //建立新节点
        q->a=i+1;
        p->next=q;
        p=q;
    }
    p->next=zznan;
    //女队的循环链表 ,以zznv为头节点
    zznv=(LNode*)malloc(sizeof(LNode));
    zznv->a=1;
    zznv=p;
    for(i=1;i<nv;i++)
    {
        q=(LNode*)malloc(sizeof(LNode));  //建立新节点
        q->a=i+1;
        p->next=q;
        p=q;
    }
    p->next=zznv;
    cout<<"男女循环队列构造完成"<<endl<<endl;;
    if(nan<nv) b=nan;
    else b=nv;
    wuhui(b,n,zznan,zznv);
}
void wuhui(int b,int n,LNode *zznan,LNode *zznv)
{
    int i,j;
    for(i=0;i<n;i++) //轮数
    {
        cout<<"第"<<i+1<<"轮"<<endl;
        for(j=0;j<b;j++)
        {
            cout<<"男队"<<zznan->a<<"号和女队"<<zznv->a<<"号"<<endl;
            zznan=zznan->next;
            zznv=zznv->next;
        }
        cout<<endl;   
    }
}
搜索更多相关主题的帖子: include 
2016-07-28 12:22
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:20 
你的思路大概就是每轮读取男女舞伴数据,建立链表,然后成对输出,最后可能会留下一个非空链表。
不知道你最后留下的这个非空链表(就是没有匹配的那些人)还要不要用于下一轮的匹配?
从你的main函数里面我没看到循环,貌似你只是匹配了能匹配的一些人然后就输出了。。。

但你的“就是依次配对,这一轮没配上的下一轮先配,队列”说的好像不是这个意思哦!
如果说你希望实现“这一轮没配上的下一轮先陪”,那你首先要实现的就是让他可以读到下一轮的数据,
然后你不能在duilie()里面去创建两个链表,而是应该从main函数传递两个链表指针(第一次使用的时候指针为NULL,后来时用的就是匹配过后剩下的)。

C++语言我不会,我C用得比较多,Java刚学皮毛。。。如果程序思路没问题的话,建议你把帖子发到“C++板块”去,算法板块只讨论思路

φ(゜▽゜*)♪
2016-08-03 03:29
快速回复:模拟舞伴配对算法出现了些问题,请指教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025239 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved