mcoloring.cpp

来自「回溯法的m着色问题」· C++ 代码 · 共 62 行

CPP
62
字号
#define N 10
#include <stdio.h>
#include <string.h>
#include <vector>
using namespace std;

bool G[N][N];
int n,m,x[N];

int nextvalue(int k)
{
	for(;;)
	{
		x[k]=x[k]+1;
		if (x[k]==m+1){
			x[k]=0;
			return x[k];
		}
		for(int j=1;j<=n;j++)
			if (G[k][j]&&x[k]==x[j])
				break;
		if (j==n+1)
			return 0;
	}
}

void mcoloring(int k)
{
	
	for(int i=1;i<=m;i++)
	{
		nextvalue(k);
		if (x[k]==0)
			break;
		if (k==n)
		{	for(int j=1;j<=n;j++)
				printf("%d",x[j]);
			printf("\n");
		}	
		else
			mcoloring(k+1);
	}
}

int main()
{
	printf("input n(着色点数)=? ");
	scanf("%d",&n);
	printf("input m(最大色数)=? ");
	scanf("%d",&m);
	printf("input G[][]=?\n");
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
		{	
			printf("G[%d][%d]=",i,j);
			scanf("%d",&G[i][j]);
		}
	for(i=1;i<=n;i++)
		x[i]=0;
	mcoloring(1);
	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?