C 部落衛隊

2022-08-19 11:12:06 字數 1260 閱讀 7768

【問題描述】

原始部落byteland中的居民們為了爭奪有限的資源,經常發生衝突。幾乎每個居民都有他的仇敵。部落酋長為了組織一支保衛部落的隊伍,希望從部落的居民中選出最多的居民入伍,並保證隊伍中任何2 個人都不是仇敵。

給定byteland部落中居民間的仇敵關係,程式設計計算組成部落衛隊的最佳方案。

【輸入】

第1行有2個正整數n和m,表示byteland部落中有n個居民,居民間有m個仇敵關係。居民編號為1,2,…,n。接下來的m行中,每行有2個正整數u和v,表示居民u與居民v是仇敵。

【輸出】

第1行是部落衛隊的人數;

第2行是衛隊組成xi,1≤i≤n,xi=0 表示居民i不在衛隊中,xi=1表示居民i在衛隊中。

【輸入輸出樣例】

inde.in

inde.out

7 10

1 21 4

2 42 3

2 52 6

3 53 6

4 55 6

1 0 1 0 0 0 1

【資料範圍】

對於100%的資料,1<=n<=100,m<=10000。

這道題的解法十分單一——暴力(搜尋)。

但是這道題需要使用一些神奇的東西,根據題目要求可以知道,在這n個人中存在敵人關係,所以你只需要定義乙個全域性的二維陣列。在輸入他們之間的關係時,將a[i][j]=1(i和j是人的編號)。

緊接著進行dfs;

詳情請看**中的備註

#include#include#include#include#include#includeusing namespace std;

int read()

bool lu[105][105];

int b[105],c[105];int ans,n,m;

void dfs(int x,int num)

return;

}if(num+n-x+1int bj=0;

for(int i=1;i<=x-1;i++)//判斷可不可以選

if(b[i]&&lu[x][i])

if(!bj)

dfs(x+1,num);//繼續dfs;

}int main()

dfs(1,0);

printf("%d\n",ans);

for(i=1;i<=n;i++)printf("%d ",c[i]);//輸出1或0;

return 0;

}

部落衛隊 2281

部落衛隊 time limit 10000ms memory limit 65536k total submit 244 accepted 166 case time limit 1000ms description 原始部落byteland 中的居民們為了爭奪有限的資源,經常發生衝突。幾乎每個居民...

部落衛隊pascal解題程式

type jh set of 0.100 集合 varn,m,i,u,v,tj longint w jh a,f array 0.100 of boolean s array 1.100 of jh procedure search dep longint w jh t longint dep是第幾...

部落衛隊問題 分支限界法

問題描述 原始部落byteland中的居民們為了爭奪有限的資源,經常發生衝突。幾乎每個居民都有他的仇敵,部落首長為了組織一支保衛部落的隊伍,希望從部落的居民中選出最多的居民入伍,並保證隊伍中任何2個人都不是仇敵。演算法設計 給定byteland部落中居民間的仇敵關係,計算組成部落衛隊的最佳方案。資料...