标签:
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 14601 | Accepted: 7427 |
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.
Source
// // main.cpp // poj2157 // // Created by Candy on 9/30/16. // Copyright © 2016 Candy. All rights reserved. // #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <vector> using namespace std; const int N=28; int n; char s[N]; struct edge{ int v,ne; }e[N*N]; int h[N],cnt=0; inline void ins(int u,int v){ cnt++; e[cnt].v=v;e[cnt].ne=h[u];h[u]=cnt; } int col[N],num=0,has[N],maxcol,flag; inline bool check(int u){ for(int i=h[u];i;i=e[i].ne) if(col[e[i].v]==col[u]) return 0; return 1; } void dfs(int d){ if(d>n) {flag=1;return;} if(flag) return; for(int cur=1;cur<=maxcol;cur++){ col[d]=cur; if(check(d)) dfs(d+1); col[d]=0; } } int main(int argc, const char * argv[]) { while(scanf("%d",&n)!=EOF&&n){ cnt=0;memset(h,0,sizeof(h));memset(col,0,sizeof(col)); for(int i=1;i<=n;i++){ scanf("%s",s+1); int len=strlen(s+1);int u=s[1]-‘A‘+1; for(int j=3;j<=len;j++){ ins(u,s[j]-‘A‘+1); } } for(maxcol=1;maxcol<=4;maxcol++){ flag=0; dfs(1); if(flag){ if(maxcol==1)printf("1 channel needed.\n"); else printf("%d channels needed.\n",maxcol); break; } } } }
POJ1129Channel Allocation[迭代加深搜索 四色定理]
标签:
原文地址:http://www.cnblogs.com/candy99/p/5923629.html