package guoxin;
//图的m着色问题
public class Zuose {
/**
* @param args
*/
public static void main(String[] args) {
int p[][]= new int[6][6];
p[1][2]=1;
p[1][3]=1;
p[2][1]=1;
p[2][3]=1;
p[2][4]=1;
p[2][5]=1;
p[3][2]=1;
p[3][1]=1;
p[3][5]=1;
p[4][2]=1;
p[4][5]=1;
p[5][4]=1;
p[5][3]=1;
graph(p,5,3);
}
/**
*
* @param p表示图中点之间的关系,p[i][j]=0表示点i与j之间没有连线,p[i][j]=1表示有连线,下表从1开始
* @param n图中顶点的个数,
* @param m//最多允许使用的颜色数
*/
private static void graph(int p[][],int n,int m){
int c[]=new int[n+1];
for(int i=0;i<=n;i++){
c[i]=0;
}
int k=1;
while(k>=1){
c[k]=c[k]+1;
while(c[k]<=m){
if(isPermit(p,c,k))break;
else{
c[k]+=1;
}
}
if(k==n&&c[k]<=m){
for(int i=1;i<=n;i++){
System.out.println(c[i]);
}
return;
}else if(c[k]<=m){
k=k+1;
}else{
c[k]=0;
k=k-1;
}
}
}
//判断对指定顶点着色后是否与前面已经着色的顶点放生冲突
private static boolean isPermit(int p[][],int c[],int k){
for(int i=1;i<k;i++){
if(p[i][k]==1&&c[i]==c[k])return false;
}
return true;
}
}
package guoxin;
//图的m着色问题
public class Zuose {
/**
* @param args
*/
public static void main(String[] args) {
int p[][]= new int[6][6];
p[1][2]=1;
p[1][3]=1;
p[2][1]=1;
p[2][3]=1;
p[2][4]=1;
p[2][5]=1;
p[3][2]=1;
p[3][1]=1;
p[3][5]=1;
p[4][2]=1;
p[4][5]=1;
p[5][4]=1;
p[5][3]=1;
graph(p,5,3);
}
/**
*
* @param p表示图中点之间的关系,p[i][j]=0表示点i与j之间没有连线,p[i][j]=1表示有连线,下表从1开始
* @param n图中顶点的个数,
* @param m//最多允许使用的颜色数
*/
private static void graph(int p[][],int n,int m){
int c[]=new int[n+1];
for(int i=0;i<=n;i++){
c[i]=0;
}
int k=1;
while(k>=1){
c[k]=c[k]+1;
while(c[k]<=m){
if(isPermit(p,c,k))break;
else{
c[k]+=1;
}
}
if(k==n&&c[k]<=m){
for(int i=1;i<=n;i++){
System.out.println(c[i]);
}
return;
}else if(c[k]<=m){
k=k+1;
}else{
c[k]=0;
k=k-1;
}
}
}
//判断对指定顶点着色后是否与前面已经着色的顶点放生冲突
private static boolean isPermit(int p[][],int c[],int k){
for(int i=1;i<k;i++){
if(p[i][k]==1&&c[i]==c[k])return false;
}
return true;
}
}
分享到:
相关推荐
这是用C++语言写的一个关于图着色的问题。对于初学算法的人有帮助。
c++实现回溯算法解决图的m着色问题 开发环境:eclipse+mingw 压缩工具:快压。
包含ppt讲解与代码。 这是我的博客,包含数据挖掘,机器学习,基本算法等内容 http://www.cnblogs.com/Dzhouqi/
C语言图的着色问题回溯法,用的是排列树的框架,里面的代码可以直接运行。
回溯法解决图着色问题,附源代码(C++)以及PPT
用分治法解决快速排序问题及用动态规划法解决最优二叉搜索树问题及用回溯法解决图的着色问题.pdf
应用回溯法求解图的着色问题 C++描述,已调试通过。
int color::ok(int k) {//检查颜色可用性 for(int j=1;j;j++) if ((a[k][j]==1)&&(x[j]==x[k])) return 0; return 1; } void color::backtrack(int...i<=m;i++){ x[t]=i; if(ok(t)) backtrack(t+1); } }
采用回溯法解决旅行商问题,获得最短路径回路。
深入理解分治法的算法思想,应用分治法解决实际的算法问题。 【实验性质】 综合性实验 【实验内容与要求】 实验要求】 设下图G=(V,E)是一连通无向图,有3种颜色,用这些颜色为G的各顶点着色,每个顶点着一种颜色,且...
回溯法实现皇后问题和着色问题,实现语言为C语言,源代码可编译通过,算法设计与分析的相关资料
m着色问题,用C++写的,回溯法写的,其实就和n皇后问题非常类似,相信大家一定没问题吧
使用回溯法解决n皇后问题,没有用到栈的结构(但实际算法类似于栈),代码比较简约漂亮
这是一个用Java实现图的m着色问题的算法
C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码
本例采用了java编写的图的m着色问题,采用的回溯法,参考:算法设计与分析
回溯法解决数独问题-2.docx
算法设计作业,用c++编写的,回溯法求解n皇后问题 运行环境VC6.0
主要介绍了Python基于回溯法解决01背包问题,结合实例形式分析了Python回溯法采用深度优先策略搜索解决01背包问题的相关操作技巧,需要的朋友可以参考下