题意:给定一个图,然后给其中的每个点着色,要求每个相邻的点颜色不能相同
思路:此题题意比较简单,首先判断两点是否相邻,然后相邻情况下着的色是否一样,存储图不能用邻接矩阵保存,否则会超存,
直接用一个结构体保存两个相邻的两点,然后对结构体里面的直接判断就可以了
代码:
#include<iostream>
#include<algorithm>
#include<vector>
#include<set>
using namespace std;
int n = 0, m = 0,k= 0;
struct node {
int a, b;//相邻的两点
};
int main() {
cin >> n >> m;
vector<node> v(m);
for (int i = 0; i < m; i++) {
scanf("%d%d", &v[i].a, &v[i].b);
}
cin >> k;
if (k == 0 || n == 0) {
printf("No\n");
}
else {
for (int j = 0; j < k; j++) {
set<int> s;
int arr[10005] = { 0 }, flag = true;
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
s.insert(arr[i]);
}
for (int i = 0; i < m; i++) {
if (arr[v[i].a] == arr[v[i].b])flag = false;
}
if (flag) {
printf("%d-coloring\n", s.size());
}
else {
printf("No\n");
}
}
}
system("pause");
return 0;
}