图的m着色问题 回溯法

 

#include 
#include 
using namespace std;

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<>n>>m;
	cout<> arr[i][j];
			cout << arr[i][j] << " ";
		}
		cout << "\n";
	}
	
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cout << arr[i][j] << " ";
			output << arr[i][j] << " ";
		}
		cout<<"\n";
		output<<"\n";
	}
	
	output << "\n"; 
	cout<<"\n";
	cout<<"\n"<

 

你可能感兴趣的:(算法)