?? fac5_8.java
字號:
//本程序取自王曉東編著“算法分析與設計”第 174 頁,例
//圖的m著色問題的回溯解法
//
class Coloring
{
static int n;
static int m;
static boolean [][]a;
static int []x;
static long sum;
public static long mColoring(int mm)
{
m=mm;
sum=0;
backtrack(1);
return sum;
}
private static void backtrack(int t)
{
if(t>n)
{
sum++;
for(int i=1;i<=n;i++)
System.out.print(x[i]+" ");
System.out.println();
}
else
for(int i=1;i<=m;i++)
{
x[t]=i;
if(ok(t))backtrack(t+1);
}
}
private static boolean ok(int k)
{
for(int j=1;j<=n;j++)
if(a[k][j] && (x[j]==x[k]))return false;
return true;
}
}//
public class Fac5_8{
public static void main(String args[])
{
Coloring abc=new Coloring();
int n1=5;
int m1=4;
int x1[]=new int[n1+1];
boolean a1[][]=new boolean [n1+1][n1+1];
a1[1][1]=false;a1[1][2]=true; a1[1][3]=true; a1[1][4]=true; a1[1][5]=false;
a1[2][1]=true; a1[2][2]=false;a1[2][3]=true; a1[2][4]=true; a1[2][5]=true;
a1[3][1]=true; a1[3][2]=true; a1[3][3]=false;a1[3][4]=true; a1[3][5]=false;
a1[4][1]=true; a1[4][2]=true; a1[4][3]=true; a1[4][4]=false;a1[4][5]=true;
a1[5][1]=false;a1[5][2]=true; a1[5][3]=false;a1[5][4]=true; a1[5][5]=false;
for(int k=0;k<=n1;k++)
x1[k]=0;
abc.x=x1;
abc.a=a1;
abc.n=n1;
abc.m=m1;
System.out.println("圖的m著色問題的最大可解方案數為 " + abc.mColoring(m1));
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -