题目链接:
https://odzkskevi.qnssl.com/5a85a65abd98a64d2f1bf7440cfb6fb8?v=1535813894
题意:
给卫星设置频率,最多三种,告诉你哪些卫星之间不能是同一频率,问你是否能适当安排,以满足题意。
思路:
最多35个卫星,深搜即可。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 100;
int mp[maxn][maxn];
int rela[maxn];//rela[i]表示编号为i的卫星的频率,取0,1,2
int n,m;
bool flag;//是否满足要求
void init()
{
flag = false;
memset(mp,0,sizeof mp);
memset(rela,-1,sizeof rela);
rela[0] = 0;//默认第一个卫星频率为零
}
void dfs(int cur)
{
if(flag)
return ;
for(int i = 0; i < cur; i++)
{
if(mp[i][cur] && rela[i]==rela[cur])//如果现在的卫星和之前的卫星相邻且频率同,则不满足条件
return;
}
if(cur == n-1)
{
flag = true;
return;
}
for(int i = 0; i < 3; i++) //每个卫星三种频率枚举
{
rela[cur+1] = i;
dfs(cur+1);
if(flag)
return;
}
return ;
}
int main()
{
int t;
cin>>t;
while(t--)
{
init();
cin>>n>>m;
for(int i = 0; i < m; i++)
{
int x,y;
cin>>x>>y;
mp[x][y] = mp[y][x] = 1;
}
dfs(0);
if(flag)
cout<<'Y'<<endl;
else
cout<<'N'<<endl;
}
return 0;
}