【問題描述】
原始部落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部落中居民間的仇敵關係,計算組成部落衛隊的最佳方案。資料...