程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> HDU 1151 Air Raid(最小路徑覆蓋)

HDU 1151 Air Raid(最小路徑覆蓋)

編輯:關於C++
二分圖匹配(匈牙利算法的DFS實現)
初始化:g[][]兩邊頂點的劃分情況
建立g[i][j]表示i->j的有向邊就可以了,是左邊向右邊的匹配
g沒有邊相連則初始化為0
uN是匹配左邊的頂點數,vN是匹配右邊的頂點數
調用:res=hungary();輸出最大匹配數
優點:適用於稠密圖,DFS找增廣路,實現簡潔易於理解
時間復雜度:O(VE)
***************************************************************************/

頂點編號從0開始的

 

/*
HDU 1151*/

#include
#include
#include
#include
using namespace std;


/* **************************************************************************
//二分圖匹配(匈牙利算法的DFS實現)
//初始化:g[][]兩邊頂點的劃分情況
//建立g[i][j]表示i->j的有向邊就可以了,是左邊向右邊的匹配
//g沒有邊相連則初始化為0
//uN是匹配左邊的頂點數,vN是匹配右邊的頂點數
//調用:res=hungary();輸出最大匹配數
//優點:適用於稠密圖,DFS找增廣路,實現簡潔易於理解
//時間復雜度:O(VE)
//***************************************************************************/
//頂點編號從0開始的
const int MAXN=150;
int uN,vN;//u,v數目
int g[MAXN][MAXN];
int linker[MAXN];
bool used[MAXN];
bool dfs(int u)//從左邊開始找增廣路徑
{
    int v;
    for(v=0;v

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved