平面圖頂點染色<->其對偶圖(依然是個平面圖)的面染色
再由四色定理,因而最多4種顏色
//0 ms #include<cstdio> #include<algorithm> #include<cstring> using namespace std; #define N 30 char s[100],cc; bool map[N][N]; int c[N],vis[1000000][5]; int n,num,o; bool DFS(int step) { if (step > n)return true; o++;int tmp=o; memset(vis+tmp,0,sizeof(int)*5); for (int j=1; j <=n;++j) if (map[step][j]==1&&c[j]) vis[tmp][c[j]]=1; for (int i=1; i<=num;++i) if (!vis[tmp][i]) { c[step] = i; if (DFS (step + 1)) return true; } c[step]=0; return false; } void doit() { memset(map,0,sizeof(map)); int len; for (int i=1;i<=n;i++) { scanf("%c:",&cc); gets(s); len=strlen(s); for (int j=0;j<len;j++) map[cc-'A'+1][s[j]-'A'+1]=1; } int ans; for (ans=1;;ans++)//由四色問題ans應不超過4 { memset(c,0,sizeof(c)); o=0; num=ans; if (DFS(1)) break; } if (ans==1)printf("1 channel needed.\n"); else printf("%d channels needed.\n",ans); } int main() { while (scanf("%d",&n),n) {gets(s); doit(); } } /* 6 A:BEF B:AC C:BD D:CEF E:ADF F:ADE */
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。