[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\n");
30                 return;
31             }
32         }
33     }
34     printf("Yes\n");
35 }

DFS也可求图的拓扑序。

posted on 2019-01-06 23:46  HuisClos  阅读(205)  评论(0编辑  收藏  举报

导航