标签:des style http java color os strong 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)
思路:
编号,构建新图,遍历坐标和为奇数的点,求出最大匹配;
然后,遍历每个点(link数组),如果它有匹配点的话,就将其输出。
#include"stdio.h"
#include"string.h"
#define N 100
#define M 55
int e[N][N],id[N][N];
int n,m,g[N][N],cnt;
int mark[N],link[N];
int dir[4][2]={0,1,0,-1,-1,0,1,0};
struct node //存可匹配点的横纵坐标
{
int x,y;
}p[N];
int judge(int x,int y)
{
if(x>0&&x<=n&&y>0&&y<=m)
return 1;
return 0;
}
int find(int k)
{
int i;
for(i=0;i<cnt;i++)
{
if((p[i].x+p[i].y)%2)
continue;
if(!mark[i]&&g[k][i])
{
mark[i]=1;
if(link[i]==-1||find(link[i]))
{
link[i]=k;
return 1;
}
}
}
return 0;
}
int main()
{
int i,j,k,q,x,y,u,v;
while(scanf("%d%d",&n,&m),n||m)
{
memset(e,-1,sizeof(e));
memset(g,0,sizeof(g));
memset(id,0,sizeof(id));
scanf("%d",&q);
while(q--)
{
scanf("%d%d",&u,&v);
e[u][v]=0;
}
cnt=0;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(e[i][j]==-1)
{
p[cnt].x=i;
p[cnt].y=j;
id[i][j]=cnt++;
}
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(e[i][j]==-1)
{
for(k=0;k<4;k++)
{
x=dir[k][0]+i;
y=dir[k][1]+j;
if(judge(x,y)&&e[x][y]==-1)
{
u=id[i][j];
v=id[x][y];
g[u][v]=g[v][u]=1;
}
}
}
}
}
int ans=0;
memset(link,-1,sizeof(link));
for(i=0;i<cnt;i++)
{
if((p[i].x+p[i].y)%2==0)
continue;
memset(mark,0,sizeof(mark));
ans+=find(i);
}
printf("%d\n",ans);
for(i=0;i<cnt;i++)
{
if(link[i]==-1)
continue;
j=link[i];
printf("(%d,%d)--(%d,%d)\n",p[i].x,p[i].y,p[j].x,p[j].y);
}
printf("\n");
}
return 0;
}
hdu 1507 Uncle Tom's Inherited Land*(二分),布布扣,bubuko.com
hdu 1507 Uncle Tom's Inherited Land*(二分)
标签:des style http java color os strong io
原文地址:http://blog.csdn.net/u011721440/article/details/38144629