矩阵游戏--二分图的匈牙利算法

https://www.luogu.com.cn/problem/P1129

学习路线---https://blog.csdn.net/qq_39304630/article/details/108135381

1.二分图就是两个独立的两个集合,如这里是行和列

2.匈牙利匹配就是媒婆拉媒,没伴侣或者伴侣可以换就将当前的塞给她

3.最后true的个数就算最小点覆盖数或者最大匹配数

复制代码
#include<bits/stdc++.h>
#include<string>
using namespace std;
#define N 100011
typedef long long ll;
typedef pair<int,int> pii;
int t,n; 
int mp[201][201];
int mate[201];
bool bo[201];
bool metch(int x)///二分图--匈牙利算法 
{
	for(int j=1;j<=n;j++)
	{
		if(!bo[j]&&mp[x][j])///黑且没标记 
		{
			bo[j]=true;
			if(mate[j]==0||metch(mate[j]))///没伴侣或者j的伴侣可以换另一个 
			{
				mate[j]=x;///那j的伴侣现在就是x了 
				return true;///匹配成功 
			}
		}
	}
	return false;///一圈下来没有,失败qwq 
}
int main()
{
cin>>t;
while(t--)
{
	cin>>n;
	int s=0;
	memset(mate,0,sizeof(mate));///一定要清0!!!! 
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cin>>mp[i][j];
			if(mp[i][j]) s++;
		}
	}
	if(s<n) cout<<"No";
	else
	{
		s=0;
		for(int i=1;i<=n;i++)
		{
			memset(bo,false,sizeof(bo));
			if(metch(i)) 
			{
				s++;
			}
		}
		if(s==n) cout<<"Yes";///行列不重复的要够n个
		else cout<<"No"; ///不够就百搭 
	}
	cout<<endl;
}
return 0;
}
相关推荐
chao1898449 小时前
基于C# WinForm实现的仿微信打飞机游戏
游戏·微信·c#
張 ~9 小时前
上班好玩的桌面宠物软件游戏
游戏·宠物·桌面宠物游戏·bongo cat
hn小菜鸡14 小时前
LeetCode 1306.跳跃游戏III
算法·leetcode·游戏
咕噜企业分发小米16 小时前
腾讯云游戏音视频方案如何助力初创公司提升用户粘性?
游戏·音视频·腾讯云
da_vinci_x17 小时前
PS 消失点:贴图透视总画歪?无需建模,2D 也能“空间绘图”
游戏·aigc·设计师·贴图·技术美术·游戏美术·关卡设计
gis分享者17 小时前
学习threejs,生成复杂3D迷宫游戏
学习·游戏·3d·threejs·cannon·迷宫·cannon-es
zore_c17 小时前
【C语言】EasyX图形库——实现游戏音效(详解)(要游戏音效的看过来!!!)
c语言·开发语言·经验分享·笔记·游戏
AA陈超1 天前
虚幻引擎5 GAS开发俯视角RPG游戏 P07-18.生成火球术
c++·游戏·ue5·游戏引擎·虚幻
_大学牲1 天前
Flutter 勇闯2D像素游戏之路(三):人物与地图元素的交互
flutter·游戏·游戏开发
游戏技术分享1 天前
【鸿蒙游戏技术分享 第71期】资质证明文件是否通过
游戏·华为·harmonyos