HDU 1281 棋盘游戏(二分图匹配)

博主学习二分图匹配并开始做相关题目,起初认为不用二分图匹配也能做,建图时觉得麻烦,最后采用不算建图的写法,直接在map里找,将横纵坐标算成二分图两边,还感慨思维易被模板僵化。

题目

今天学了一下二分图匹配,开始写这个题目。

刚开始感觉根本不用二分图匹配就可以做啊……emmm

然后开始想怎么建图,感觉怎么建图都很麻烦,最后yy了一个不算建图的写法,直接在map里找,然后横坐标和纵坐标算成二分图的两边?

写代码真实有趣!

有时候思维就是被模板僵化的鸭

#include<iostream>
#include<stdio.h> 
#include<algorithm>
#include<string.h>
#include<vector>
#include<set>
#include<math.h>
#include<queue>
#include<map>
#include<stack>
#define go(i,a,b) for (int (i)=(a);(i)<=(b);(i)++)
#define N 105
#define ll long long

using namespace std;
int n,m,k;

bool in[N];
int match[N];
int mp[N][N]; //图
struct node{
	int x,y;
}p[N];
bool fp(int u){
	go(i,1,m){
		if (mp[u][i]==0) continue;
		if (!in[i]){
			in[i]=true;
			if (match[i]==-1||fp(match[i])){
				match[i]=u;
				return true;
			}
		}
	}
	return false;
}
int maxp(){
	int ans=0;
	go(i,1,n){
		memset(in,false,sizeof(in));
		if (fp(i)) ans++;
	}
	return ans;
}
int main(){
	int x,y,inv,inv2,ans,ca=0;
	while (scanf("%d%d%d",&n,&m,&k)!=EOF){
		memset(mp,0,sizeof(mp));
		go(i,1,k){
			scanf("%d%d",&x,&y);
			mp[x][y]=1;
		}
		memset(match,-1,sizeof(match));
		inv=maxp();
		//printf("%d\n",inv);
		int k=0;
		go(i,1,m){
			if (match[i]!=-1){
				p[++k]=(node){match[i],i};
			}
		}
		ans=0;
		go(i,1,k){
			mp[p[i].x][p[i].y]=0;
			memset(match,-1,sizeof(match));
			inv2=maxp();
			if (inv2<inv) ans++;
			mp[p[i].x][p[i].y]=1;
		}
		printf("Board %d have %d important blanks for %d chessmen.\n",++ca,ans,inv);
	} 
}

二分图匹配

本研究基于扩展卡尔曼滤波(EKF)方法,构建了一套用于航天器姿态与轨道协同控制的仿真系统。该系统采用参数化编程设计,具备清晰的逻辑结构和详细的代码注释,便于用户根据具体需求调整参数。所提供的案例数据可直接在MATLAB环境中运行,无需额外预处理步骤,适用于计算机科学、电子信息工程及数学等相关专业学生的课程设计、综合实践或毕业课题。 在航天工程实践中,精确的姿态与轨道控制是保障深空探测、卫星组网及空间设施建设等任务成功实施的基础。扩展卡尔曼滤波作为一种适用于非线性动态系统的状态估计算法,能够有效处理系统模型中的不确定性与测量噪声,因此在航天器耦合控制领域具有重要应用价值。本研究实现的系统通过模块化设计,支持用户针对不同航天器平台或任务场景进行灵活配置,例如卫星轨道维持、飞行器交会对接或地外天体定点着陆等控制问题。 为提升系统的易用性与教学适用性,代码中关键算法步骤均附有说明性注释,有助于用户理解滤波器的初始化、状态预测、观测更新等核心流程。同时,系统兼容多个MATLAB版本(包括2014a、2019b及2024b),可适应不同的软件环境。通过实际操作该仿真系统,学生不仅能够深化对航天动力学与控制理论的认识,还可培养工程编程能力与实际问题分析技能,为后续从事相关技术研究或工程开发奠定基础。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值