标签:des style blog http java color os io
4 4 6 1 1 1 4 2 2 4 1 4 2 4 4 4 3 4 4 2 3 2 2 2 3 1 0 0
4 (1,2)--(1,3) (2,1)--(3,1) (2,3)--(3,3) (2,4)--(3,4) 3 (1,1)--(2,1) (1,2)--(1,3) (2,3)--(3,3)
解题:根据奇偶性建图+最大匹配数+最大匹配数的记录。根据奇偶性建图:在一个平面坐标系中,某个格子的 纵横坐标和 与其相领格子的 纵横坐标和 的绝对值相差1,即相差一个数。由于奇数与偶数相间分布,故只选择纵横坐标和为奇数或者纵横坐标和为偶数的点进行建图(从始至终只能选择其中一种方式),这样保证了是一个二分图。
这题的写法,把原先的匈牙利算法的线段的端点的由的写成了二维的,算法还是那样的。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 #include <climits> 7 #include <vector> 8 #include <queue> 9 #include <cstdlib> 10 #include <string> 11 #include <set> 12 #define LL long long 13 #define INF 0x3f3f3f3f 14 using namespace std; 15 const int maxn = 110; 16 struct{ 17 int x,y; 18 }link[maxn][maxn]; 19 int n,m; 20 bool mp[maxn][maxn],vis[maxn][maxn]; 21 bool isIn(int x,int y){ 22 if(x < 1 || x > n || y < 1 || y > m) 23 return false; 24 return true; 25 } 26 bool dfs(int x,int y){ 27 static const int dir[4][2] = {{1,0},{-1,0},{0,1},{0,-1}}; 28 for(int i = 0; i < 4; i++){ 29 int tx = x+dir[i][0]; 30 int ty = y+dir[i][1]; 31 if(isIn(tx,ty) && !vis[tx][ty] && !mp[tx][ty]){ 32 vis[tx][ty] = true; 33 if(link[tx][ty].x == -1 || dfs(link[tx][ty].x,link[tx][ty].y)){ 34 link[tx][ty].x = x; 35 link[tx][ty].y = y; 36 return true; 37 } 38 } 39 } 40 return false; 41 } 42 int main(){ 43 int i,j,u,v,k; 44 while(scanf("%d%d",&n,&m),n+m){ 45 scanf("%d",&k); 46 memset(mp,false,sizeof(mp)); 47 while(k--){ 48 scanf("%d%d",&u,&v); 49 mp[u][v] = 1; 50 } 51 int ans = 0; 52 memset(link,-1,sizeof(link)); 53 for(i = 1; i <= n; i++){ 54 for(j = 1; j <= m; j++){ 55 memset(vis,false,sizeof(vis)); 56 if(((i+j)&1) && !mp[i][j] && dfs(i,j)) ans++; 57 } 58 } 59 printf("%d\n",ans); 60 for(i = 1; i <= n; i++){ 61 for(j = 1; j <= m; j++){ 62 if(link[i][j].x != -1) 63 printf("(%d,%d)--(%d,%d)\n",link[i][j].x,link[i][j].y,i,j); 64 } 65 } 66 printf("\n"); 67 } 68 return 0; 69 }
XTU 二分图和网络流 练习题 B. Uncle Tom's Inherited Land*,布布扣,bubuko.com
XTU 二分图和网络流 练习题 B. Uncle Tom's Inherited Land*
标签:des style blog http java color os io
原文地址:http://www.cnblogs.com/crackpotisback/p/3866023.html