2019-06-16  本文已影响0人  Vincy_ivy

记顶点和边的集合位V和E,[V]和[E]表示顶点和边的个数,在V重,顶点被编号位0~[V]-1

1.邻接矩阵

2.邻接表

邻接表

 

3.图的搜索

title

n=3;输出No
思路:如果只用2种颜色,那么给定一个顶点的颜色后,和它相邻的顶点的颜色也就确定了。因此,选择任意一个顶点出发,依次确定相邻顶点的颜色,就可以判断是都可以被2种颜色染色了//用深搜。

这只是个模板【参考博客//cscec.com.cn/whpc_new/whal/201712/2775290.html】

#include<cstdio>
#include<iostream>
#include<bits/stdc++.h>
#include<cstring>
#include<algorithm>
using namespace std;
vector<int> G[1000];//图
int V;//顶点数
int color[1000];//顶点i的颜色(1 or -1)

//把顶点染成1或-1
bool dfs(int v,int c){
    color[v]=c;//把顶点v染成颜色c
    for(int i=0;i<G[i].size();i++){
        //如果相邻的顶点同色,则返回false
        if(color[G[v][i]]==c)
            return false;
        //如果相邻的顶点未被染色,则染成-c
        if(color[G[v][i]]==0&&!dfs(G[v][i],-c))
            return false; 
    }
    //如果所有顶点都染过色了,则返回true
    return true; 
} 

void solve(){
    for(int i=0;i<V;i++){
        if(color[i]==0){
            //如果顶点i还没被染色,则染成1
            if(!dfs(i,1)){
                printf("No\n");
                return ;
            } 
        }
    }
    printf("Yes\n");
}
上一篇 下一篇

猜你喜欢

热点阅读