1 #include2 #include 3 using namespace std; 4 struct node{ 5 int x1,y1,x2,y2,color; 6 }G[15]; 7 int n,ans,deg[15];//n表区域的个数,ans存储最终结果,deg存储拓扑图中各点的入度 8 bool vis[15],m[15][15];//vis用于标记是否访问过,m表示各点之间的联系 9 void buildG()//建立拓扑图,用于确定优先级 10 {11 for(int i=0;i =ans) return;//剪枝,假如当前取画笔次数已大于之前结果,直接返回 21 if(dep==n){ //到达解答树目标状态,保存ans值,因前面有cnt>=ans时退出,所以当前cnt较小 22 ans=cnt;23 return;24 }25 int i,j;26 for(i=0;i >T;44 while(T--)45 {46 cin>>n;47 for(i=0;i >G[i].y1>>G[i].x1>>G[i].y2>>G[i].x2>>G[i].color;49 memset(m,0,sizeof(m));50 memset(deg,0,sizeof(deg));51 buildG();52 ans=15;53 dfs(0,0,0);//都从0开始 54 cout< <
//DFS+拓扑排序