POJ 3041 Asteroids
这个题的大意是:
有个人用一种威力巨大的武器可以打爆小行星,给定一个区域内所有的小行星坐标,问最少能用多少次这种武器打爆所有的小行星。
这是一个二分图匹配的模版题,以每一个小行星的X,Y坐标做二分图,然后上模版。
下面是代码:
#include <stdio.h> #include <string.h> const int M=500; int n,k,map1[M][M],vis[M],link[M],m; bool dfs(int x) { for(int y=1; y<=n; y++) { if(map1[x][y] && !vis[y]) { vis[y]=true; if(link[y]==0 || dfs(link[y])) //link[y]==0 : { link[y]=x; return true; } } } return false; } void hungray() { int i; for(i=1; i<=n; i++) { memset(vis,false,sizeof(vis)); if(dfs(i)) { m++; } } } int main() { scanf("%d%d",&n,&k); memset(map1,0,sizeof(map1)); memset(link,0,sizeof(link)); int x,y,i; for(i=0; i<k; i++) { scanf("%d%d",&x,&y); map1[x][y]=1; } m=0; hungray(); printf("%d\n",m); return 0; }