博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pku 1691 Painting A Board DFS 抽象建图 + 拓扑排序
阅读量:7079 次
发布时间:2019-06-28

本文共 1845 字,大约阅读时间需要 6 分钟。

题意:

给定一个大矩形,然后给出n个需要染色的小矩形的左上角的坐标,右下角的坐标以及该矩形要染得颜色,每个颜色对应的一把刷子。问将这些小矩形染完规定的颜色之后需要最少的刷子数。

要求:只当该小矩形的上边的矩形都染完色之后,该矩形才能染色,如果同一个刷子被使用多次也要计算进来;

思路:

首先根据一个矩形的所有上部分染完之后才能染色建立关系图,然后根据拓扑排序的理论,找入度为0的点开始染色,(因为入度为0 表明其上部的所有矩形都已经染色),dfs所有点求最小值。


注意这里画的边只是统计度数用的,而我们真正用来描述可行的边是根据经过该点之后的剩余点里面的入度为0的点时接下来要访问的点:

View Code
#include 
#include
#define maxn 17using namespace std;const int inf = 0x7fffffff;struct node{ int lx,ly; int rx,ry; int col;}p[maxn];int map[maxn][maxn],deg[maxn];bool vt[maxn];int ans,n;void Buildmap(){ int i,j; memset(deg,0,sizeof(deg)); memset(map,0,sizeof(map)); for (i = 0; i < n; ++i) { for (j = 0; j < n; ++j) { if (i != j && p[j].ly == p[i].ry && !(p[j].rx < p[i].lx || p[j].lx > p[i].rx))//建图的关键 { map[i][j] = 1; deg[j]++; } } }}void dfs(int dep,int col,int sum){ int i,j; if (sum > ans) return ; if (dep == n) { if (sum < ans) ans = sum; return ; } for (i = 0; i < n; ++i) { if (!vt[i] && deg[i] == 0)//每次去入度为0的点 { vt[i] = true; for (j = 0; j < n; ++j) { if (map[i][j]) deg[j]--; } if (p[i].col == col) dfs(dep + 1,col,sum); else dfs(dep + 1,p[i].col,sum + 1); vt[i] = false; for (j = 0; j < n; ++j) { if (map[i][j]) deg[j]++; } } }}int main(){ //freopen("d.txt","r",stdin); int i,t; scanf("%d",&t); while (t--) { scanf("%d",&n); for (i = 0; i < n; ++i) scanf("%d%d%d%d%d",&p[i].ly,&p[i].lx,&p[i].ry,&p[i].rx,&p[i].col); ans = inf; Buildmap(); memset(vt,false,sizeof(vt)); dfs(0,0,0); printf("%d\n",ans); } return 0;}

 

 

你可能感兴趣的文章
MySQL常用简单小命令
查看>>
ERROR: child process failed, exited with error number 100 mongodb报错
查看>>
epoll 使用小结
查看>>
c#调用存储过程实现登录界面
查看>>
测试类。。。重写篇
查看>>
二进制
查看>>
入侵式与非入侵式JavaScript
查看>>
ny47 过河问题
查看>>
神奇高效的Linux命令行
查看>>
阿里云老后台
查看>>
mikadonic-文件访问控制设置(深层次的权限控制setfacl)
查看>>
这是标题,用来测试博客皮肤标题
查看>>
AJax详解
查看>>
从一段时间段中获取所有日期
查看>>
Java中如何设置表格处于不可编辑状态
查看>>
Java JTable视图窗口滚动并定位到某一行
查看>>
课堂练习
查看>>
HTML学习成果 制作一个空白简历
查看>>
使用mybatis自带工具,自动生成表对应domain、mapper.xml以及dao
查看>>
餐饮ERP相关问题FAQ
查看>>