图的遍历
#include <iostream>
#include <vector>
#include <set>
using namespace std;
struct node{
int v1;
int v2;
};
vector<node> edges(10010);
vector<int> vertex(10010);
int n, m, k;
bool issame(){
for(int i = 0; i < m; i ++){
if(vertex[edges[i].v1] == vertex[edges[i].v2]) return true;
}
return false;
}
int main(){
cin >> n >> m;
for(int i = 0; i < m; i ++){
cin >> edges[i].v1 >> edges[i].v2;
}
cin >> k;
while(k --){
set<int> color;
for(int i = 0; i < n; i ++){
int v_color;
cin >> v_color;
color.insert(v_color);
vertex[i] = v_color;
}
if(issame()) printf("No\n");
else{
printf("%d-coloring\n", color.size());
}
}
return 0;
}
感觉不需要写搜索,直接用循环遍历就可以了。
使用set存储可以很方便计算出输入颜色的个数。
vector(int nSize):创建一个vector,元素个数为nSize