栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 1129 Channel Allocation

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 1129 Channel Allocation

#include<iostream>#include<stdio.h>using namespace std;typedef class{public:int next[27];  //直接后继int pn;   //next[]指针(后继个数)}point;int main(int i,int j,int k){int n;while(cin>>n){if(!n)break;getchar();  //n的换行符point* node=new point[n+1];  //结点for(i=1;i<=n;i++){getchar();  //结点序号getchar();  //冒号if(node[i].pn<0)   //初始化指针node[i].pn=0;char ch;while((ch=getchar())!='n'){j=ch%('A'-1);   //把结点字母转换为相应的数字,如A->1  C->3node[i].next[ ++node[i].pn ]=j;}}int color[27]={0};  //color[i]为第i个结点当前染的颜色,0为无色(无染色)color[1]=1;  //结点A初始化染第1种色int maxcolor=1;  //当前已使用不同颜色的种数for(i=1;i<=n;i++)  //枚举每个顶点{color[i]=n+1;  //先假设结点i染最大的颜色bool vist[27]={false};  //标记第i种颜色是否在当前结点的相邻结点染过for(j=1;j<=node[i].pn;j++) //枚举顶点i的所有后继{int k=node[i].next[j];if(color[k])  //顶点i的第j个直接后继已染色vist[ color[k] ]=true;  //标记该种颜色}for(j=1;i<=n;j++)  //从最小的颜色开始,枚举每种颜色if(!vist[j] && color[i]>j) //注意染色的过程是一个不断调整的过程,可能会暂时出现大于4的颜色{    //因此不能单纯枚举4种色,不然会WAcolor[i]=j;break;}if(maxcolor<color[i]){maxcolor=color[i];if(maxcolor==4)   //由四色定理知,最终完成染色后,图上最多只有四种颜色break;        //因此当染色过程出现结点的颜色为4时,就可以断定最少要用4种颜色染色}}if(maxcolor==1)cout<<1<<" channel needed."<<endl;elsecout<<maxcolor<<" channels needed."<<endl;delete node;}return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/377177.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号