poj1691--Painting A Board(拓扑+dfs)
题目链接: 点击打开链接 题目大意:一个矩形由n个小矩形组成,如今要给小矩形染色,可是颜料会向下滑,为了防止弄乱颜料,所以要先染上面的矩形,后然染以下的矩形。每一次改变颜色都要用一个新的刷子。问最小用多少刷子。 依照染色的条件。能够找到一个拓扑序列,拓扑序列中前面的要先染。后面的要后染,按拓扑的顺序dfs找出最少的刷字数。 #include <cstdio> #include <cstring> #include <vector> #include <stack> #include <algorithm> using namespace std ; struct node{ int y1 , x1 , y2 , x2 , c ; }p[20]; vector <int> vec[20] ; int sta[20] , k ; int in[20] , min1 , n ; int vis[20] ; int cmp(node a,node b) { return a.y1 < b.y1 ; } void dfs(int c,int num,int ans) { if( ans > min1 ) { return ; } if( num == n ) { min1 = ans ; return ; } int i , j , l ; for(i = 0 ; i < n ; i++)