編程演算法 - 二分圖判定 代碼(C)

來源:互聯網
上載者:User

標籤:mystra   編程演算法   二分圖判定   代碼   c++   

二分圖判定 代碼(C)


本文地址: http://blog.csdn.net/caroline_wendy


題目: 給定一個具有n個頂點的圖. 要給圖上每個頂點染色, 並且要使相鄰的頂點顏色不同. 

是否能最多用2種顏色進行染色. 沒有重邊和閉環.


二分圖問題.


使用深度優先搜尋(dfs), 把頂點染成c, 然後相鄰邊染成-c. 

如果相鄰邊被染色過, 且相同, 則圖不是二分圖; 如果所有邊都被染色, 並且互不相同, 則是二分圖.


進行多次搜尋, 避免非連通圖.


代碼:

/* * CppPrimer.cpp * *  Created on: 2014.7.27 *      Author: Caroline *//*eclipse cdt*/#include <stdio.h>#include <vector>using namespace std;class Program {static const int MAX_V = 100;/*vector<int> G[MAX_V] = {{1,3}, {0,2}, {1,3}, {0,2}};int V = 4;*/vector<int> G[MAX_V] = {{1,2}, {0,2}, {0,1}};int V = 3;int color[MAX_V] = {0};bool dfs(int v, int c) {color[v] = c;for (size_t i=0; i<G[v].size(); ++i) {if (color[G[v][i]] == c) return false;if (color[G[v][i]] == 0 && !dfs(G[v][i], -c)) return false;}return true;}public:void solve() {for (int i=0; i<V; i++) {if (color[i] == 0) {if(!dfs(i,1)) {printf("result = No\n");return;}}}printf("result = Yes\n");}};int main (void){Program iP;iP.solve();return 0;}


輸出:

result = No








相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.