想看的就帮忙看下吧,不知道那出错了

Tiger-3D 2011-05-07 10:13:01

/**********************************************************
5-8 m图着色问题
2011年5月7日9:05:30

记录:
************************************************************/
#include<iostream>
using namespace std ;

class Color
{
private :
int n , //图的顶点数
**a , //图的邻接矩阵
m , //可用着色数
*x ; //当前解
long Sum ; //已找到的可行方案

bool Available (int t) ; //检查颜色的可用性
void Backtrack (int t) ; //m图着色问题核心算法

public :
Color () //默认的构造函数
{
n = m = Sum = 0 ;
}

Color (int n, int m) //带形参的构造函数
{
int i(0), j(0) ;

this ->n = n ;
this ->m = m ;
Sum = 0 ;

x = new int[n+1] ;
a = new int*[n+1] ;
for (i = 1 ; i <= n ; ++i)
a[i] = new int[n+1] ;

for (i = 1 ; i <= n ; ++i)
x[i] = 0 ;

cout <<"请依次输入该图的边的信息......"<<endl ;
for (i = 1 ; i <= n ; ++i)
for (j = 1 ; j <= n ; ++j)
cin >>a[i][j] ;
}

~Color () //析构函数
{
int i(0) ;

delete []x ;
for (i = 1 ; i <= n ; ++i)
delete []a[i] ;
delete []a ;
}

friend int mColoring (int n, int m) ;
} ;

int mColoring (int n, int m) ;

int main()
{
cout <<"请分别输入图的顶点数和颜色种数:" ;
int n(0), m(0) ;
cin >>n >>m ;

int Sum = mColoring (n, m) ;

cout <<"该m着色问题的方案有"<<Sum <<"种!"<<endl ;
return 0 ;
}

int mColoring (int n, int m)
{
Color X(n, m) ;

X.Backtrack (1) ;

return X.Sum ;
}

//m图着色问题核心算法
void Color::Backtrack (int t)
{
if (t > n)
{
int i(0) ;

++Sum ;
for (i = 1 ; i <= n ; ++i)
cout <<x[i] <<' ' ;
cout <<endl ;
}
else
{
int i(0) ;

for (i = 1 ; i <= m ; ++i)
{
x[t] = i ;

if ( Available(t) )
{
Backtrack (t+1) ;
}

x[t] = 0 ;
}
}
}

bool Color::Available (int t)
{
int i (0) ;

for (i = 1 ; i <= n ; ++i)
if ( (a[t][i] == 1) && (x[t] == x[i]) )
return false ;

return true ;
}









问题就是:程序的最后一个函数:Available(int t) 。该函数里面的x[t] 和 x[i] 始终都相等,于是,函数总是返回false
要知道,在类的构造函数里面,我已经把x[i]的值全部初始化为0啦,我cout了一下for 循环里面的x[i] 和 [t],
均相等,等于循环的当前i;
...全文
94 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger-3D 2011-05-15
  • 打赏
  • 举报
回复
不好意思,这么晚才来结贴
Tiger-3D 2011-05-15
  • 打赏
  • 举报
回复
不好意思,这么晚才来结贴
qq120848369 2011-05-07
  • 打赏
  • 举报
回复
。。。这种代码只有你自己调试。
ryfdizuo 2011-05-07
  • 打赏
  • 举报
回复
手头没编译器,顶了、
淡蓝 2011-05-07
  • 打赏
  • 举报
回复
肯定是你数据有问题,这种问题你调试一下什么都明白了
logiciel 2011-05-07
  • 打赏
  • 举报
回复
LZ代码与以下帖子的算法相同:
http://blog.csdn.net/fableboy/archive/2009/03/08/3969452.aspx

对于以下输入产生相同的结果:
5 3

0
1
1
0
0

1
0
1
1
1

1
1
0
0
1

0
1
0
0
1

0
1
1
1
0

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧