zoukankan      html  css  js  c++  java
  • [Algorithms]图的搜索

    未完待续


    知道图的存储,DFS,BFS

     二分图判定

     1 //二分图判定
     2 //给定一个有n个顶点的图,给图上每个顶点染色,要使相邻顶点颜色不同,是否能用最多2种颜色染色?无重边和自环。
     3 //只用两种颜色,确定一个顶点的颜色后,和它相邻的顶点的颜色随之确定的那个。
     4 //选择任意一个顶点出发,依次确定相邻顶点的颜色,判断是否可被2种颜色染色,深度优先搜索
     5 
     6 //输入
     7 vector<int> G[MAX_V];//
     8 int V; //顶点数
     9 int color[MAX_V];//顶点i的颜色(1 or -1)
    10 
    11 //把顶点染成1或-1
    12 bool dfs(int v,int c){
    13     color[v] = c;//把顶点v染成颜色c
    14     for (int i = 0;i < G[v].size();i++){
    15         //如果相邻的顶点同色,则返回false
    16         if(color[G[v][i]] == c)
    17             return false;
    18         if(color[G[v][i]]== 0 && !dfs(G[v][i],-c))
    19             return false;
    20     }
    21     //如果所有顶点都染过色了,则返回true
    22     return true;
    23 }
    24 void solve(){
    25     for(int i = 0;i < V;i++){
    26         if(color[i] == 0){
    27             //如果顶点i还没被染色,则染成1
    28             if(!dfs(i,1)){
    29                 printf("No
    ");
    30                 return;
    31             }
    32         }
    33     }
    34     printf("Yes
    ");
    35 }

    DFS也可求图的拓扑序。

  • 相关阅读:
    mySQL教程 第1章 数据库设计
    数学符号大全
    C# 正则表达式 判断各种字符串(如手机号)
    C# 面向对象编程
    博客园 网址
    优化正则表达式的诀窍
    hdu 1596 floyd
    poj3259,简单判断有无负环,spfa
    hdu 1496 hash
    hdu 1429 bfs+二进制状态压缩
  • 原文地址:https://www.cnblogs.com/HuisClos/p/10231070.html
Copyright © 2011-2022 走看看