解治法:
二部图问题(染色法):
分为三种颜色状态,用(-1,0,1)代表,0为没染色。一开始先设成全都是没染色状态。
然后DFS遍历每个点进行染色,若遍历到没有染色的点,则把他染为1色,把他邻接的点染为-1,如果遇到邻接点颜色相同,则退出,判断为非二部图。
#include<iostream>
#include <vector>
#include <math.h>
using namespace std;
const int number = 8;
bool ifbipatrion = true;
vector<int> Nodes[number];//存点数据
int Nodescolor[number];//用于给点染色,0为没染色,1和-1为两种颜色
void dfs(int node){
if(ifbipatrion == false)
return;
for(int i=0;i<Nodes[node].size();i++){
int pos = Nodes[node].at(i);
int color = Nodescolor[pos];
if(color