POJ 2536 Gopher II (二分图求最大匹配)

5 篇文章 0 订阅

题意:

老鹰来抓老鼠,老鼠开始逃跑,老鼠移动速度为 v,老鼠必须在 s 时间内跑进洞里,否则就会被抓到。

给出所有老鼠的坐标、老鼠洞的坐标、老鼠的移动速度 v、老鼠跑进洞里的限定时间 s,输出最少有多少只老鼠被抓到。

构图:

分别计算每只老鼠跑到每个老鼠洞需要的时间,如果在限定时间内能跑到,则当前老鼠和老鼠洞之间有路径,否则没有。

老鼠、老鼠洞以及他们之间的路径构成一个二分图,转化成求该二分图的最大匹配。


(匈牙利算法)Source Code:

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

const int maxn = 200 + 10;

struct coord
{
    double x;
    double y;
};

coord cog[maxn];
coord coh[maxn];

int n;  //gophers
int m;  //gopher holes

int next[maxn];
int mp[maxn][maxn];
bool vis[maxn];

bool isSafe( double x1, double y1, double x2, double y2, int s, int v )
{
    if( ( ( y2 - y1 ) * ( y2 - y1 ) + ( x2 - x1 ) * ( x2 - x1 ) ) - s * s * v * v * 1.0 <= 0.0 )
        return true;
    return false;
}

bool dfs( int s )
{
    for( int i = 1; i <= m; i++ )
    {
        if( !vis[i] && mp[s][i] != 0 )
        {
            vis[i] = 1;
            if( next[i] == -1 || dfs( next[i] ) )
            {
                next[i] = s;
                return true;
            }
        }
    }
    return false;
}

void init()
{
    memset( mp, 0, sizeof( mp ) );
    memset( next, -1, sizeof( next ) );
}

int main()
{
    int s;  //limited time
    int v;  //speed

    while( ~scanf( "%d%d%d%d", &n, &m, &s, &v ) )
    {
        init();

        for( int i = 1; i <= n; i++ )
            scanf( "%lf%lf", &cog[i].x, &cog[i].y );
        for( int i = 1; i <= m; i++ )
            scanf( "%lf%lf", &coh[i].x, &coh[i].y );

        for( int i = 1; i <= n; i++ )
        {
            for( int j = 1; j <= m; j++ )
            {
                if( isSafe( cog[i].x, cog[i].y, coh[j].x, coh[j].y, s, v ) )
                     mp[i][j] = 1;
            }
        }

        int ans = 0;
        for( int i = 1; i <= n; i++ )
        {
            memset( vis, 0, sizeof (vis ) );
            if( dfs( i ) )
                ans++;
        }

        printf( "%d\n", n - ans );
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip
毕设新项目基于python3.7+django+sqlite开发的学生就业管理系统源码+使用说明(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 学生就业管理系统(前端) ## 项目开发环境 - IDE: vscode - node版本: v12.14.1 - npm版本: 6.13.4 - vue版本: @vue/cli 4.1.2 - 操作系统: UOS 20 ## 1.进入项目目录安装依赖 ``` npm install ``` ## 2.命令行执行进入UI界面进行项目管理 ``` vue ui ``` ## 3.编译发布包(请注意编译后存储路径) #### PS:需要将编译后的包复制到后端项目的根目录下并命名为'static' 学生就业管理系统(后端) ## 1.项目开发环境 - IDE: vscode - Django版本: 3.0.3 - Python版本: python3.7.3 - 数据库 : sqlite3(测试专用) - 操作系统 : UOS 20 ## 2.csdn下载本项目并生成/安装依赖 ``` pip freeze > requirements.txt pip install -r requirements.txt ``` ## 3.项目MySQL数据库链接错误 [点击查看解决方法](https://www.cnblogs.com/izbw/p/11279237.html)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值