CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

请大家给个主函数吧。谢谢了!

楼主microtan0902(microtan)2004-05-04 15:23:04 在 C/C++ / C++ 语言 提问

该问题是图的m着色问题。该程序目的是给定一个无向连通图G=(V,E)和m种不同的颜色。如果这个图不是m可着色的就给出否定回答,如果这个图是m可着色图的,则要找出所有不同的着色法。请各位给一个主函数和Backtrack()类。最好有比较详细的注视,谢谢了  
   
  递规函数Backtrack(1)实现对整个解空间的回溯搜索。Backtrack(i)搜索解空间中第i层子树。函数Backtrack是类Color的成员。类Color的其他成员记录解空间中结点信息,以减少传给函数Backtrack的参数。sum记录当前已找到的可m着色方案数。函数mColoring负责类Color的私有变量的初始化。  
   
  在函数Backtrack中,当i>n时,表示算法已搜索至一个叶结点,得到一个新的m着色方案,因此当前已找到的可m着色方案数sum++。  
   
  当i<=n时,当前扩展结点z是解空间中的一个内部结点。该结点有x[i]=1,2,3,,,,,,m     共m个儿子结点。对当前扩展结点z的每一个儿子结点,由函数Ok检查其可行性,并以深度优先的方式递归地对可行子树进行搜索,或减去不可行子树。  
   
   
  class   Color  
  {  
  friend   int   mColoring(int,int,int   *   *);  
  private:  
  bool   Ok(int   k);  
  void   Backtrack(int   t);  
  int   n, //图的顶点数  
  m, //可用颜色数  
  **a; //图的邻接矩阵     此处是不是应该是逗号啊?  
  *x, //当前解  
  long   sum; //当前已找到的可m着色方案数  
  };  
   
  //*********************************************************  
   
  bool   Color::Ok(int   k)  
  {//检查颜色可用性  
  for(int   j=1;j<=n;j++)  
  if((a[k][j]==1)&&(x[j]==x[k]))   return   false;  
  return   true;  
  }  
   
  //*********************************************************  
  void   Color::Backtrack(int   t)  
  {  
  if(t>n)  
  {  
  sum++;  
  for(int   i=1;i<=n;i++)  
  cout<<x[i]<<'';  
  cout<<endl;  
  }  
  else  
  for(int   i=1;i<=m;i++)  
  {  
  x[t]=i;  
  if(Ok(t))   Backtrack(t+1);  
  }  
  }  
  //**********************************************************  
  int   mColoring(int   n,int   m,int   **a)  
  {  
  Color   X;  
  //初始化X  
  X.n=n;  
  X.m=m;  
  X.a=a;  
  X.sum=0;  
  int   *p=new   int   [n+1];     //   what   is   the   meaning   ???  
  for(int   i=0;i<=n;i++)  
  p[i]=0;  
  X.x=p;  
  X.Backtrack(1);  
  delet[]   p;  
  return   x.sum;  
  }  
   
   
   
  问题点数:0、回复次数:0Top

相关问题

  • 请问主函数调用主函数的问题
  • 请问主调函数参数的空间由主调函数还是被调函数分配?
  • 请一函数
  • 请教函数!
  • 请给我一个加入<br>函数
  • 请问:dll中的全局函数,可以在主函数中调用吗?
  • 请问OnDraw函数的pDC为什么不能传递给线程函数?
  • FIND()函数请教。
  • Instr函数请教
  • 请教api函数

关键词

  • 函数
  • 着色
  • backtrack
  • 方案
  • 解空间
  • 图
  • 类color

得分解答快速导航

  • 帖主:microtan0902

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo