poj 3041 Asteroids 最大匹配

2021-07-11 07:20:58 字數 757 閱讀 8726

把每一列當成乙個點,每一行當成乙個點,若行節點和列節點之間有邊,則表明該行列該列有乙個障礙物。

可以放炸彈炸掉成行或者成列的障礙物!

主要是構圖:將每一行當成乙個點,構成集合1, 每一列也當成乙個點,構成集合2;每乙個障礙物的位置座標將集合1與集合2中的點連線起來,也就是將每乙個障礙物作為連線節點的邊。這樣可以輕易的得出本題是乙個最小點覆蓋的問題,假設1個行節點覆蓋了5個列節點,即這個行節點與這5個列節點間有5條邊(即五個障礙物),由於這5條邊都被那個行節點覆蓋,即表明這5個障礙物都在同一列上,於是可以一顆炸彈全部清除,而本題也就轉化成求最小點覆蓋數的問題。

又有乙個定理是:最小點覆蓋數 = 最大匹配數, 所以此題轉化成求最大匹配數。

最大匹配演算法又稱匈牙利演算法

//思路:將行看做u集合,列看做v集合,進行增廣路的尋找

#include

#include

#define max 10002

int map[502][502];

bool visit[max];

int match[max];

int n;

int path(int start)}}

return false;

}int main()

int result=0;

for(i=1;i<=n;i++)    //從u集合的第乙個數字尋找

printf("%d\n",result);

return 0;

}

POJ 3041 Asteroids 最小覆蓋數

題目大意 一輛宇宙飛船在乙個小行星帶中,你知道,這很危險。他有一種 可以清除掉一行或一列的小行星。問把小行星全部清除最少的 使用次數。思路 因為每次可以清除掉一行或者一列,所以可以把行和列建成圖,行和列為邊,因為最後要全部清除,也就是說所有邊都使用過,正好就是最小覆蓋數。最小覆蓋數 最大匹配。inc...

POJ3041 最小頂點覆蓋

題意 給你乙個n n 的矩陣,和x所在的座標,問你最少放多少個 可以把圖里的所有x都覆蓋,每個 可以覆蓋一行,或者一列。思路 最小頂點覆蓋,最小頂點覆蓋 二分匹配,每一行最多放乙個,每一列最多放乙個,對於每乙個點,他只要被一行或者一列照應就行了。所以直接把x所在的點的行和列連線在一起,二分後對於當前...

POJ3041最小點覆蓋

頂點覆蓋 g中的任意邊都至少有乙個端點屬於s的頂點幾何 s 屬於 v 最小頂點覆蓋,就是盡可能少的選出一些點構成集合s,使得圖g中任意邊,都至少又乙個端點屬於s 每一列當成乙個點,每一行當成乙個點,若行節點和列節點之間有邊,則表明該行列該列有乙個障礙物。主要是構圖 將每一行當成乙個點,構成集合1,每...