您的位置:首页 > 其它

zoj 1179 Finding Rectangles

2013-08-25 21:44 316 查看
据说可以用动态规化解,想不出来就用爆搜结果过了。

输出格式让我纠结了很久一直WA

#include<cstdio>
#include<cstring>
#define MAX 27
struct edge{
int x,y;
char tag;
};
edge edges[MAX];
int p[4];
bool vis[MAX];
int num;
bool flag;
int ansnum=0;
bool canput(edge a, int b)
{

switch(b)
{

case 0: return true;

case 1: if(a.y==edges[p[0]].y&&a.x>edges[p[0]].x)return true ;
else return false ;

case 2: if(a.x==edges[p[1]].x&&a.y<edges[p[1]].y) return true ;

else return false ;
case 3: if(a.x==edges[p[0]].x&&a.y==edges[p[2]].y) return true;
else return false;
}

}
void dfs(int n )
{

int i,j;
if(n==4)
{
if(++ansnum>10)
{printf("\n");
ansnum=1;

}
if(flag) printf("\n");
printf(" ");
for(j=0; j<4; j++)
{
printf("%c",edges[p[j]].tag);

}
flag=false;

return ;
}
for(i=0; i<num; i++)
{
if(!vis[i]&&canput(edges[i],n))
{
vis[i]=true;
p
=i;

dfs(n+1);
vis[i]=false;
}
}
}

int main()
{
int no=0;
int i;

while(scanf("%d",&num),num)
{
getchar();
no++;
for( i=0; i<num; i++)
{

scanf("%c %d %d",&edges[i].tag,&edges[i].x,&edges[i].y);
getchar();

}
memset(vis,0,sizeof(vis));
flag=true;

ansnum=0;

printf("Point set %d:",no);
dfs(0);
if(flag)
printf(" No rectangles\n");
else
printf("\n");
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  zoj