给定一个具有n个不同顶点的图,要给图上每个顶点染色,并且要使相邻的顶点颜色不同,问是否最多用2种颜色进行染色?没有重边和子环
#include<iostream>
#include<vector>
using namespace std;
class node{
public:
int color;
int arr[100];
int count;
node()
{
color=0;
count=0;
}
add(int num)
{
arr[count++]=num;
}
}n[4];
bool dfs(int no,int color)
{
n[no].color=color;
for(int i=0;i<n[no].count;i++)
{
if(n[n[no].arr[i]].color==color)
return false;
else if(n[n[no].arr[i]].color==0)
{
bool result=dfs(n[no].arr[i],-color);
if(!result)
return false;
}
}
return true;
}
int main()
{
n[0].add(1);
n[0].add(3);
n[1].add(0);
n[1].add(2);
n[2].add(1);
n[2].add(3);
n[3].add(0);
n[3].add(2);
cout<<dfs(0,1);
return 0;
}
这个好难,主要是要保存其他节点的信息,刚开始使用容器,但是发现容器太麻烦,而且因为来回调用也没啥提示,随意搞得很难受,想来想去还是数组比较简单些,当然也可以自定义容器,不过意义不大。
本文探讨了如何在不形成重边和子环的前提下,利用最多两种颜色对具有n个不同顶点的图进行染色,确保相邻顶点颜色不同。通过深度优先搜索(DFS)算法实现图的二分验证,采用数组而非容器简化节点信息存储,提高代码效率。
605

被折叠的 条评论
为什么被折叠?



