1. 程式人生 > >杭電2063 二分匹配匈牙利演算法

杭電2063 二分匹配匈牙利演算法

#include<stdio.h>
#include<string.h>
#define MAX 600
int pos[MAX][MAX],match[MAX],dian[MAX];
main()
{
    int a,b,M,N,K,i,count;
    while(scanf("%d",&K)!=EOF && K!=0)
    {
        count=0;
        scanf("%d %d",&M,&N);
        memset(pos,0,sizeof(pos));        //將所有元素置零,pos[i][j]=1表示女生i與男生j可匹配
        memset(match,0,sizeof(match)); //match[i]=j表示男生i與女生j已經匹配
        memset(dian,0,sizeof(dian));   //dian[i]=1表示該點已經被訪問過。
        for(i=0;i<K;i++)
        {
            scanf("%d %d",&a,&b);
            pos[a][b]=1;
        }
            for(i=1;i<=M;i++)             //①對每個女生(接下①)
        {
            memset(dian,0,sizeof(dian)); //已訪問點重置
            if(find(i,N)!=0) count++;
        }
        printf("%d\n",count);
    }
}
int  find(int start,int N)
{
    int i;
    for(i=1;i<=N;i++)                   //①遍歷所有男生
    {
        if(pos[start][i]==1 && dian[i]==0)   //   如果雙方有匹配意願,且該點未訪問,訪問該點
        {
            dian[i]=1;
            if(match[i]==0 || find(match[i],N)!=0)  //如果男方i目前未匹配 或者 已經匹配,但是能重新給j(match[i]=j)女生分配i男生以外的男生,因為此時dian【i】=1,所以不會再次匹配j與i。
            {
                match[i]=start;                           //則匹配i男生與start女生,j女生此時與另外一男匹配
                return 1;                                   //匹配成功返回 1
            }
        }
    }
    return 0;             // 匹配失敗返回0
}
 

相關推薦

2063 二分匹配匈牙利演算法

#include<stdio.h> #include<string.h> #define MAX 600 int pos[MAX][MAX],match[MAX],dian[MAX]; main() {     int a,b,M,N,K,i,co

HDU 1083 Courses 二分匹配匈牙利演算法模板

題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=1083 Problem Description Consider a group of N students and P courses. Each student visits

二分匹配——匈牙利演算法和KM演算法

一、二分圖 定義:若把簡單圖G的頂點集分成兩個不相交的非空集合V1和V2,使得圖中每一條邊都連線V1中的一個頂點和V2中的一個頂點(邊的兩個端點一個在V1中,另一個在V2中),則圖G稱為二分圖,此時稱(V1,V2)為G的頂點集的一個二部劃分。 什麼是簡單圖?

2063】(二分最大匹配匈牙利演算法

題目: RPG girls今天和大家一起去遊樂場玩,終於可以坐上夢寐以求的過山車了。可是,過山車的每一排只有兩個座位,而且還有條不成文的規矩,就是每個女生必須找個個男生做partner和她同坐。但是,每個女孩都有各自的想法,舉個例子把,Rabbit只願意和XHD或PQK做p

二分匹配 匈牙利演算法 模版

/* 匈牙利演算法鄰接表形式 使用前用init()進行初始化,給uN賦值 加邊使用函式addedge(u,v) */ const int MAXN=5010;//點數的最大值 const int MAXM=50010;//比數的最大值 struct Edge { int to,next; }e

二分匹配/匈牙利演算法】飛行員配對方案問題

 P2756 飛行員配對方案問題 確認過眼神, 是二分圖匹配板子題啦!!! 跑個匈牙利, 有匹配的輸出, 記得先輸出外籍飛行員, 因為有spj順序無所謂啦qwq 最近A的最順利的題了哈哈哈哈哈哈開心!!!!!!!! 1 #include<cstdio> 2 #incl

二分圖最大匹配 匈牙利演算法的簡單理解

(本文圖片及被*標註內容來自CSDN部落格:pi9nc) 基本概念—二分圖 二分圖:是圖論中的一種特殊模型。若能將無向圖G=(V,E)的頂點V劃分為兩個交集為空的頂點集,並且任意邊的兩個端點都分屬於兩個集合,則稱圖G為一個為二分圖。 匹配:一個匹配即一個包含若干條邊的集合,且其中任

hdu4619 Warm up 2 二分匹配匈牙利演算法

今天晚上學了一下神奇的匈牙利演算法QwQ 題的大意是給出許多1*2和2*1的塊的座標,保證1*2的塊之間、2*1的塊之間沒有重疊,問最多有幾個塊互不重疊。 首先建立一個二分圖,如果兩個塊重疊就在它們所代表的點之間畫一條邊,然後用匈牙利演算法求出二分圖的最大匹配,答案就

要成為魔法少女嗎!!1681(二分匹配——匈牙利演算法模板題)

題目描述 酸奶醬是一位魔法少女,並且她很熱衷於點化她的其他小夥伴和她一起成為魔法少女。 現在有一個棘手的問題擺在酸奶醬面前——她有M套成為魔法少女不可缺少的魔法戰鬥服,以及N個想成為魔法少女的小夥伴。魔法戰鬥服是有靈性的,它有想要跟隨的主人。酸奶醬想盡可能多的把更多的魔法戰鬥服分給她的小夥伴,她現在想知道

過山車 (二分圖最大匹配 匈牙利演算法

開始時比較難理解的演算法 原題:過山車 題意:n個女生,m個男生,每個女生都有幾個固定的可以搭配的男生,有k組搭配總共,輸入a,b代表a女生可以和b男生搭配,問最後最多有幾對搭配。 先附程式碼: int head_g[N]; int now_g;

1150 Machine Schedule 最小點覆蓋(最大二分匹配-匈牙利演算法)鄰接表寫法

日! 最近 CF 做的多了,再做多組輸入的題的時候 忘記陣列清空,,然後wa了 好久。。。 我就說嗎。。。這麼裸的匈牙利怎麼會出錯呢? ——————————————————————分割 這個題是最小點覆蓋問題,畫出圖來以後可以知道是找最少的點覆蓋所有邊,每個點覆蓋它相連的邊

圖論演算法----二分匹配----匈牙利演算法詳解

一、一些相關概念 1、二分圖的概念: 二分圖又稱作二部圖,是圖論中的一種特殊模型。 設G=(V,E)是一個無向圖。 如果頂點集V可分割為兩個互不相交的子集X和Y,並且圖中每條邊連線的兩個頂點一個在X

二分圖的最大匹配 匈牙利演算法

幾種概念: 二分圖:是圖論中的一種特殊模型。若能將無向圖G=(V,E)的頂點V劃分為兩個交集為空的頂點集,並且任意邊的兩個端點都分屬於兩個集合,則稱圖G為一個為二分圖。可以想象一下離散數學中的二部圖。 匹配:一個匹配即一個包含若干條邊的集合,且其中任意兩

1463 Strategic game 最小點覆蓋(二分匹配-匈牙利演算法

最小點覆蓋問題 也是匹配問題 這裡用到了 匈牙利演算法, 還用到了結構體陣列存鄰接表的做法 **之前錯誤理解為最小邊覆蓋,6個點的鏈就卡到了邊覆蓋想法 #include <iostream> #include <cstdio> #i

二分匹配——匈牙利演算法和KM演算法

二分圖的概念 二分圖又稱作二部圖,是圖論中的一種特殊模型。 設G=(V, E)是一個無向圖。如果頂點集V可分割為兩個互不相交的子集X和Y,並且圖中每條邊連線的兩個頂點一個在X中,另一個在Y中,則稱圖G為二分圖。 二分圖的性質 定理:當且僅當無向圖

二分圖的最大匹配匈牙利演算法和最小支配集

求二分圖最大匹配(指派問題)的匈牙利演算法:   談匈牙利演算法自然避不開Hall定理,即是:對於二部圖G,存在一個匹配M, 使得X的所有頂點關於M飽和的充要條件是:對於X的任意一個子集A,和A鄰接的點集為T(A),恆有:   |T(A)|   > =   |A|  

二分匹配相關演算法及例題分析 最大匹配匈牙利演算法 最大權匹配KM演算法二分圖型別問題彙總)

二分圖最大匹配: 問題描述:給出一個二分圖,找一個邊數最大的匹配。就是選擇儘量多的邊,使得選中的邊中任意兩條邊均沒有公共點。如果所有的點都是匹配點那就是一個完美匹配。 解決方案:增廣路定理 增廣

HDU4185 Oil Skimming(二分匹配,匈牙利演算法)

Problem Description Thanks to a certain “green” resources company, there is a new profitable industry of oil skimming. There

(通俗易懂小白入門)二分圖最大匹配——匈牙利演算法

二分圖  先介紹一下什麼是二分圖,二分圖也叫二部圖,設G=(V,E)是一個無向圖,如果頂點V可分割為兩個互不相交的子集(A,B),並且圖中的每條邊(i,j)所關聯的兩個頂點i和j分別屬於這兩個不同的頂點集(i in A,j in B),則稱圖G為一個二分圖,如下圖所有的頂點可以分成A,B兩個集合,而

hdu-1150(二分圖+匈牙利演算法

題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=1150 思路:題目中給出兩個機器A,B;給出k個任務,每個任務可以由A的x狀態或者B的y狀態來完成。 完成任務的順序可以任意改變,每次改變一次狀態需要重啟一次機器。 將每個狀態看做一個點,每個任務看做兩個狀態