Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 12143 | Accepted: 6218 |
Description
Input
Output
Sample Input
2 A: B: 4 A:BC B:ACD C:ABD D:BC 4 A:BCD B:ACD C:ABD D:ABC 0
Sample Output
1 channel needed. 3 channels needed. 4 channels needed.
题目链接:Channel Allocation
思路:直接暴搜使相邻两个结点的频道不一样。
1 /*====================================================================== 2 * Author : kevin 3 * Filename : ChannelAllocation.cpp 4 * Creat time : 2014-08-07 09:11 5 * Description : 6 ========================================================================*/ 7 #include <iostream> 8 #include <algorithm> 9 #include <cstdio> 10 #include <cstring> 11 #include <queue> 12 #include <cmath> 13 #define clr(a,b) memset(a,b,sizeof(a)) 14 #define M 30 15 using namespace std; 16 int grap[M][M],color[M]; 17 int n,ans; 18 void DFS(int num) 19 { 20 if(num == n){ 21 return ; 22 } 23 for(int i = 1; i <= n; i++){ 24 int flag = 0; 25 for(int j = 0; j <= num; j++){ 26 if(grap[num][j] && color[j] == i){ 27 flag = 1; 28 break; 29 } 30 } 31 if(!flag){ 32 color[num] = i; 33 if(ans < i){ 34 ans = i; 35 } 36 DFS(num+1); 37 break; 38 } 39 } 40 } 41 int main(int argc,char *argv[]) 42 { 43 while(scanf("%d",&n)!=EOF && n){ 44 getchar(); 45 clr(grap,0); 46 clr(color,0); 47 char str[100]; 48 for(int i = 0; i < n; i++){ 49 gets(str); 50 int a = str[0] - ‘A‘; 51 int len = strlen(str); 52 for(int i = 2; i < len; i++){ 53 grap[a][str[i] - ‘A‘] = 1; 54 } 55 } 56 ans = 0; 57 DFS(0); 58 if(ans == 1){ 59 printf("1 channel needed.\n"); 60 } 61 else printf("%d channels needed.\n",ans); 62 } 63 return 0; 64 }
poj 1129 -- Channel Allocation,布布扣,bubuko.com
poj 1129 -- Channel Allocation
原文:http://www.cnblogs.com/ubuntu-kevin/p/3896348.html