Asteroids--POJ 3041

1、题目类型:图论、最大二分匹配、匈牙利算法。

2、解题思路:求解最小点集覆盖即求解最大二分匹配,匈牙利算法的简单应用。

3、注意事项:模拟匈牙利算法的递归过程。

4、实现方法:

  
    
#include < iostream >
using namespace std;
#define Max 510

int n,k,match[Max];
bool map[Max][Max],vis[Max];

bool DFS( int s)
{
int i;
for (i = 1 ;i <= n;i ++ )
{
if (map[s][i] && ! vis[i])
{
vis[i]
= 1 ;
if (match[i] == 0 || DFS(match[i]))
{
match[i]
= s;
return true ;
}
}
}
return false ;
}

int main()
{
int i,r,c,ans = 0 ;
cin
>> n >> k;
for (i = 0 ;i < k;i ++ )
{
cin
>> r >> c;
map[r][c]
= 1 ;
}

for (i = 1 ;i <= n;i ++ )
{
memset(vis,
0 , sizeof (vis));
if (DFS(i))
ans
++ ;
}
cout
<< ans << endl;
return 1 ;
}

 

你可能感兴趣的:(poj)