| ||||||||||
| 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 | |||||||||
简单DFS就过去了。63ms,附代码#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cstdlib>
using namespace std;
#define N 100
struct Node
{
int l_x ,l_y;
int r_x , r_y;
int num;
};
int Mark[30], n,minn;
Node Gra[20];
int check(int pos) //判断pos上面的图形是否已经都被染色了
{
for(int i = 0 ;i < n ;i++ )
{
if( Gra[i].r_x == Gra[pos].l_x && Gra[i].l_y <= Gra[pos].r_y )
{
if(!Mark[i])
return 0;
}
}
return 1;
}
void DFS(int Color, int cnt,int ans)
{
if(cnt == n )
{
if(ans <= minn)
minn = ans;
return ;
}
for( int i = 0 ;i < n ; i++)
{
if( !Mark[i] && check(i) )
{
if( Gra[i].num == Color )
{
Mark[i] = 1;
DFS( Color, cnt + 1 ,ans );
Mark[i] = 0;
}
else if( Gra[i].num != Color )
{
Mark[i] = 1;
DFS(Gra[i].num, cnt + 1, ans + 1);
Mark[i] = 0;
}
}
}
return ;
}
int main()
{
int cnt ;
cin >> cnt;
while( cnt-- )
{
cin >> n;
memset(Mark,0,sizeof(Mark));
for(int i = 0 ;i < n ;i++)
cin >> Gra[i].l_x >> Gra[i].l_y >> Gra[i].r_x >> Gra[i].r_y >> Gra[i].num;
minn = 999999;
DFS(-1,0,0);
cout << minn << 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