Machine Schedule--POJ 1325

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

2、解题思路:题目抽象为求解最大二分匹配,匈牙利算法的简单应用。

3、注意事项:注意搜索map[][]为N*M而非N*N。

4、实现方法:

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

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

bool DFS( int s)
{
int i;
for (i = 1 ;i <= m;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,tmp,x,y,ans;
while (cin >> n && n)
{
cin
>> m >> k;
ans
= 0 ;
memset(map,
0 , sizeof (map));
memset(match,
0 , sizeof (match));
for (i = 0 ;i < k;i ++ )
{
cin
>> tmp >> x >> y;
map[x][y]
= 1 ;
}

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

 

你可能感兴趣的:(schedule)