Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
这是我1691的代码 求大神指点 感激不尽#include<iostream> using namespace std; #define MIN INT_MAX; struct node { int rx,ry,lx,ly; int t; //要求的颜色 int yn; //当前节点是否已经着色 }; node s[100]; int m,n; int judge_1(node x,node y) //判断x是否在y上方 { if(x.ry==y.ly) { if(x.rx<=y.rx&&x.rx>y.lx) return 1; if(x.lx>=y.lx&&x.lx<y.rx) return 1; if(x.lx<=y.lx&&x.rx>=y.rx) return 1; } return 0; } int judge(node x) //判断是否可以着色 { if(x.yn) return 0; for(int i=0;i<n;i++) { if(judge_1(s[i],x)&&!s[i].yn)//如果节点s[i]在x上方且没有着色 则返回“0” return 0; } return 1; } void get(int x) { if(x<m) m=x; } void dfs(int k,int num,int count)//从节点“k”开始收索 { s[k].yn=1; //标记该节点已经着色 if(num==n) //收索一次后判断结果是否优于当前值 { get(count); return; } for(int i=0;i<n;i++) //从任何可着色节点收索 if(judge(s[i])) { if(s[k].t==s[i].t) { dfs(i,num+1,count); s[i].yn=0; } else { dfs(i,num+1,count+1); s[i].yn=0; } } } void dfs() //从不同点开始着色 { for(int i=0;i<n;i++) dfs(i,1,1); } int main() { int c; cin>>c; while(c--) { cin>>n; for(int i=0;i<n;i++) { cin>>s[i].ly>>s[i].lx>>s[i].ry>>s[i].rx>>s[i].t; s[i].yn=0; } m=MIN; dfs(); cout<<m<<endl; } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator