poj1691 Painting A Board(DFS+拓扑)
来源:互联网 发布:千牛mac登不上去 编辑:程序博客网 时间:2024/06/05 18:13
http://poj.org/problem?id=1691
题目大意:给一个矩形面板,里面分成了多个相邻无重叠的矩形,需要给每个矩形上色。
规定只能从上往下上色,每个矩形上方相连的矩形都上过色才能上色。
问最少的换笔次数。
代码如下:
#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>using namespace std;struct Node{int x1,y1,x2,y2,c;};Node c[16];int map[16][16],rudu[16],use[16],s,n,minn;bool cmp(Node a,Node b){return a.y1<b.y1;}void dfs(int k,int f,int v){int i,vis[16],j;if(v==n)//矩形全部涂完if(f<minn){minn=f;}for(i=0;i<n;i++){if(rudu[i]==0&&use[i]==0)//入度为0表示矩形上方的矩形均涂色了{memset(vis,0,sizeof(vis));//用来记录哪些点被更改,以便回溯use[i]=1;for(j=0;j<n;j++){if(map[i][j]==1){vis[j]=1;map[i][j]=0;rudu[j]--;}}if(k==-1)//刚开始是没颜色的寻找第一次拿起的颜色dfs(c[i].c,1,1);else if(k==c[i].c)//不需要换笔的情况dfs(k,f,v+1);elsedfs(c[i].c,f+1,v+1);//换笔的情况//回溯use[i]=0;for(j=0;j<n;j++){if(vis[j]==1){map[i][j]=1;rudu[j]++;}}}}}int main(){int t,i,j;cin>>t;while(t--){cin>>n;memset(rudu,0,sizeof(rudu));memset(map,0,sizeof(map));for(i=0;i<n;i++)cin>>c[i].y1>>c[i].x1>>c[i].y2>>c[i].x2>>c[i].c;//建图sort(c,c+n,cmp);for(i=0;i<n;i++)for(j=0;j<i;j++){if(c[j].y2==c[i].y1){if(c[j].x1<c[i].x2&&c[j].x2>c[i].x1){map[j][i]=1;//表示要涂矩形i需要先涂矩形jrudu[i]++;}}}minn=22;memset(use,0,sizeof(use));dfs(-1,0,0);cout<<minn<<endl;}return 0;}
0 0
- poj1691 Painting A Board(DFS+拓扑)
- poj1691--Painting A Board(拓扑+dfs)
- Painting A Board poj1691
- POJ1691--Painting A Board
- poj1691 Painting A Board
- POJ1691-Painting A Board
- poj_1691 Painting A Board(dfs+拓扑)
- poj1691——Painting A Board
- POJ1691 Painting A Board ACM解题报告(DFS+构造)难题=。=
- Painting A Board----DFS
- poj 1691 Painting A Board (拓扑排序+dfs)
- poj 1691 Painting A Board(dfs,拓扑排序)
- poj 1691 Painting A Board 拓扑序+dfs
- [poj 1691] Painting A Board dfs+拓扑排序
- 【POJ 1691】 Painting A Board(dfs)
- [POJ 1691]Painting A Board[DFS][排序]
- poj 1691 Painting A Board (构图 DFS)
- pku 1691 painting a board dfs+回溯 解题报告
- 如何联机调试和发布程序(99$)
- [Elasticsearch] 部分匹配 (二) - 通配符及正则表达式查询
- UIButton点击之后弹出UIDatePicker
- Linux errno 错误对照表
- 搭建一个免费的,无限流量的Blog----github Pages和Jekyll入门
- poj1691 Painting A Board(DFS+拓扑)
- 查找附近网点geohash算法及实现 (Java版本)
- Linux命令行下的文本编辑器
- 获得已安装软件的签名信息
- OC语言之内存管理
- js 文章列表li 分页
- linux mmap函数详解
- Attempted to lock an already-locked dir异常解决方法
- iOS 中的 va_list\va_arg\va_start和va_end的使用