过山车 算法题

题目

在这里插入图片描述在这里插入图片描述
对于本题有一个初步想法是设立一个n行m列的二维数组a[m][n],将各组数据代入来代表i女生是否想和j男生一起过山车,如果想则有a[i][j]=1,否则a[i][j]=0。更便于运算。
然后再写一个判断某男生x是否有伙伴的函数,大抵如下:

int qwe(int x)
{
	int i;
	for(i=1;i<=m;i++)
	{
		if(book[i]==0&&e[x][i]==1)
		{
			book[i]=1;
			if(f[i]==0||qwe(f[i]))
			{
				f[i]=x;
				return 1;
			}
		}
	}
	return 0;
}

即要求与该男生配对的女生没有被配对过,而且该女生想和该男生配对
如果该女生被配对后与其相关的数组元素变为1,表示该女生已经被配对过了。
如果这个女生被配对过了且配对的男生不是该男生,那么用递归的思路去判断这个女生之前配对的那个男生是否有其他配对,如果有,让之前的那个男生去配对其他女生,该男生配对这个女生。
大致思路如上,接下来就是咱们的代码

#include<stdio.h>
#include<string.h>
int e[1100][1100],book[1100],f[1100];
int a,b,c,d,t,n,m,sum;
int qwe(int x);
int main()
{
	scanf("%d %d %d",&t,&n,&m);
	int i,j;
	sum=0;
	while(1)
	{
		scanf("%d",&a);
		if(a==0) break;
		scanf("%d",&b);
		e[a][b]=1;
	}
	for(i=1;i<=n;i++)
	{
		memset(book,0,sizeof(book));
		if(qwe(i))
		    sum++;
	}
	printf("%d\n",s);
	return 0;
}
int qwe(int x)
{
	int i;
	for(i=1;i<=m;i++)
	{
		if(book[i]==0&&e[x][i]==1)
		{
			book[i]=1;
			if(f[i]==0||qwe(f[i]))
			{
				f[i]=x;
				return 1;
			}
		}
	}
	return 0;
}

最后结果如下:
在这里插入图片描述

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值