程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 編程算法 - 食物鏈 並查集 代碼(C)

編程算法 - 食物鏈 並查集 代碼(C)

編輯:關於C語言

編程算法 - 食物鏈 並查集 代碼(C)


食物鏈 並查集 代碼(C)

 

 

題目: 有N只動物, 分別編號為1,2,...,N. 所有動物都屬於A,B,C中的一種. 已知A吃B, B吃C, C吃A.

按順序給出兩種信息K條.

第一種: x和y屬於同一類.

第二種: x吃y.

信息之間可能會出錯和矛盾, 求不正確的信息數.

 

例如:

有N=10只動物, 給定K=7條信息.

(1) 1: x=101, y=1; 出錯:沒有101的動物.

(2) 2: x=1, y=2; 動物1吃動物2.

(3) 2: x=2, y=3; 動物2吃動物3.

(4) 2: x=3, y=3; 出錯, 動物3不能吃動物3.

(5) 1: x=1, y=3; 出錯, 動物1和動物3屬於同一種, 與(2)(3)矛盾.

(6) 2: x=3, y=1; 動物3吃動物1.

(7) 1: x=5, y=5; 動物5和動物5屬於同一種.

result = 3, 即(1)(4)(5)出錯.

 

使用並查集(disjoint set)求解.

創建3*N個元素的並查集.每一組表示元素i可能屬於的種類x, 共3種.

然後合並並查集. 找到矛盾信息.

 

代碼:

 

/*
 * main.cpp
 *
 *  Created on: 2014.7.20
 *      Author: Spike
 */

/*eclipse cdt, gcc 4.8.1*/

#include 

/*
 * main.cpp
 *
 *  Created on: 2014.7.20
 *      Author: spike
 */

/*eclipse cdt, gcc 4.8.1*/

#include 
#include 
#include 

#include 

using namespace std;

class DisjoinSet {
	static const int MAX_N = 10000;
	int par[MAX_N];
	int rank[MAX_N];
public:
	void init(int n) {
		for (int i=0; i
輸出:

 

 

ans = 3


 

 

/

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved