#include<stdio.h>
#include<string.h>
struct node
{
int x1,x2,y1,y2,code;
}rec[15];
int map[15][15],ru[15],vis[15],n,minn;
bool pan(int i,int j)
{
if(rec[i].y2==rec[j].y1&&!(rec[i].x2<rec[j].x1||rec[i].x1>rec[j].x2))
return true;
else return false;
}
void bfs(int col,int deep,int sum)
{
int i,j;
if(sum>=minn)return;
if(deep==n)
{
minn=sum;
return;
}
for(i=0;i<n;i++)
if(!vis[i])
{
if(!ru[i])
{
vis[i]=1;
for(j=0;j<n;j++)
if(map[i][j])
ru[j]--;
if(col==rec[i].code)
bfs(rec[i].code,deep+1,sum);
else bfs(rec[i].code,deep+1,sum+1);
for(j=0;j<n;j++)
if(map[i][j])
ru[j]++;
vis[i]=0;
}
}
}
int main()
{
int T,i,k,j;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d%d%d%d%d",&rec[i].y1,&rec[i].x1,&rec[i].y2,&rec[i].x2,&rec[i].code);
memset(map,0,sizeof(map));
memset(ru,0,sizeof(ru));
memset(vis,0,sizeof(vis));
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(pan(i,j))
{
map[i][j]=1;
ru[j]++;
}
minn=1<<30;
bfs(-1,0,0);
printf("%d\n",minn);
}
return 0;
}
zoj1424 Painting A Board
最新推荐文章于 2022-04-06 15:05:42 发布