未完待续
知道图的存储,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也可求图的拓扑序。
原文地址:https://www.cnblogs.com/HuisClos/p/10231070.html
时间: 2024-10-27 18:43:39