poj 3020 Antenna Placement
来源:互联网 发布:p2p网络金融 编辑:程序博客网 时间:2024/05/22 02:06
#include <iostream>
using namespace std;
int l,c;
char place[45][15];
int graph[600][600];
int used[600];
int link[600];
int hash[500];
int sum;
void side(int v,int w) //与相邻点加边到graph图里
{
int x,y;
x=hash[v*c+w];
if ( v >=1 && place[v-1][w]=='*')
{
y=hash[(v-1)*c+w];
graph[x][y]=1;
}
if (w>=1 && place[v][w-1]=='*' )
{
y=hash[v*c+w-1];
graph[x][y]=1;
}
if (v<=l-2 && place[v+1][w]=='*' )
{
y=hash[(v+1)*c+w];
graph[x][y]=1;
}
if (w<=c-2 && place[v][w+1]=='*' )
{
y=hash[v*c+w+1];
graph[x][y]=1;
}
return ;
}
int can(int t)
{
for (int i=0;i<sum;i++)
if (!used[i] && graph[t][i])
{
used[i]=1;
if (link[i]==-1 || can(link[i]))
{
link[i]=t;
return 1;
}
}
return 0;
}
int solve()
{
int num=0,r=0;
memset(link,-1,sizeof (link));
for (int i=0;i<sum;i++)
{
memset(used,0,sizeof(used));
if (can(i)) num++;
else r++;
}
return num/2+r; //因为两边是一样的点,一定出现一条边(正反向)被算两次,所以num要除以2
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&l,&c);
for (int i=0;i<l;i++)
scanf("%s",&place[i]);
memset(graph,0,sizeof(graph));
sum=0;
for (int i=0;i<l;i++)
for (int j=0;j<c;j++)
if (place[i][j]=='*')
hash[i*c+j]=sum++; //这里hash的技巧很巧妙,把二维的坐标
//转化成一个整数,以作为另一个二维数组的下标hash[i*c+j];
for (int i=0;i<l;i++)
for (int j=0;j<c;j++)
if (place[i][j]=='*') //把所有相邻的点都映射到graph中的一条边,
side(i,j); //最后得到的二分图,其实两边都是一样的点
printf("%d/n",solve());
}
return 0;
}
- poj 3020 Antenna Placement
- Poj 3020 Antenna Placement
- Poj 3020 Antenna Placement
- poj 3020 Antenna Placement
- POJ 3020 Antenna Placement
- POJ 3020 Antenna Placement
- POJ 3020 Antenna Placement
- POJ 3020 Antenna Placement
- POJ 3020 Antenna Placement
- POJ 3020 Antenna Placement
- poj 3020 Antenna Placement
- POJ 3020 Antenna Placement
- POJ 3020 Antenna Placement
- POJ 3020Antenna Placement
- 【POJ 3020】Antenna Placement
- poj 3020 Antenna Placement
- poj-3020 Antenna Placement
- POJ 3020 Antenna Placement
- poj 1324 Holedox Moving
- POJ_3356_AGTC
- poj 2007 Scrambled Polygon
- SSH项目和XFire(WebService)整合 好后测试时抱一下错误............由于本人刚上手,属菜鸟.........敬请各路神仙给予指点.........
- 万恶的android API
- poj 3020 Antenna Placement
- 7.2 下半部和推后执行的工作_tasklet
- 推荐iPhone和Android开发必备的几本中文书
- POJ_3510_A Tale from the Dark Side of the Moon
- UNIX系统编程 第2章 程序、进程和线程
- 电脑故障排除经验
- 内存溢出1
- 硕士该怎么读
- 如何像乔布斯一样演讲