/**
* 着色問題
* @author Lican
**/
public classColoring {int n;//圖的頂點數
int m;//可用顏色數
int[][] a;//圖的鄰接矩陣
int[] x;//當前解
long sum;//當前已找到的可m着色方案數
public long mcoloring(int mm,int nn,int[][] aa){
n=nn;
a=aa;
x=new int[n+1];
m=mm;
sum=0;
backtrack(1);returnsum;
}public void backtrack(intt){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);
x[t]=0;
}
}
}public boolean ok(intk){for(int j=1;j<=n;j++){if(a[k][j]==1&&x[j]==x[k])//某條邊的兩個頂點着不同顏色;a[k][j]=1表示某條邊(即邊集E中的邊)
return false;
}return true;
}public static voidmain(String[] args) {//int n=5;//int m=3;//int[][] a={{-1,-1,-1,-1,-1,-1},{-1,0,1,1,1,0},{-1,1,0,1,1,1},{-1,1,1,0,1,0},{-1,0,1,1,0,1},{-1,0,1,0,1,0}};//int n=4;//int m=4;//int[][] a={{-1,-1,-1,-1,-1},{-1,0,1,1,0},{-1,1,0,1,1},{-1,1,1,0,1},{-1,0,1,1,0}};
int n=5;int m=5;int[][] a={{-1,-1,-1,-1,-1,-1},{-1,0,1,1,1,0},{-1,1,0,1,1,1},{-1,1,1,0,1,0},{-1,1,1,1,0,1},{-1,0,1,0,1,0}};
Coloring c=newColoring();
System.out.println("着色方案如下:");long sum=c.mcoloring(m, n, a);
System.out.println("可行的着色方案數目為:"+sum);
}
}/*測試數據:
int n=4;
int m=4;
int[][] a={{-1,-1,-1,-1,-1},{-1,0,1,1,0},{-1,1,0,1,1},{-1,1,1,0,1},{-1,0,1,1,0}};
輸出:
着色方案如下:
1 2 3 1
1 2 3 4
1 2 4 1
1 2 4 3
1 3 2 1
1 3 2 4
1 3 4 1
1 3 4 2
1 4 2 1
1 4 2 3
1 4 3 1
1 4 3 2
2 1 3 2
2 1 3 4
2 1 4 2
2 1 4 3
2 3 1 2
2 3 1 4
2 3 4 1
2 3 4 2
2 4 1 2
2 4 1 3
2 4 3 1
2 4 3 2
3 1 2 3
3 1 2 4
3 1 4 2
3 1 4 3
3 2 1 3
3 2 1 4
3 2 4 1
3 2 4 3
3 4 1 2
3 4 1 3
3 4 2 1
3 4 2 3
4 1 2 3
4 1 2 4
4 1 3 2
4 1 3 4
4 2 1 3
4 2 1 4
4 2 3 1
4 2 3 4
4 3 1 2
4 3 1 4
4 3 2 1
4 3 2 4
可行的着色方案數目為:48
=======================================================
測試數據
int n=5;
int m=3;
int[][] a={{-1,-1,-1,-1,-1,-1},{-1,0,1,1,1,0},{-1,1,0,1,1,1},{-1,1,1,0,1,0},{-1,0,1,1,0,1},{-1,0,1,0,1,0}};
輸出:
着色方案如下:
1 2 3 1 3
1 3 2 1 2
2 1 3 2 3
2 3 1 2 1
3 1 2 3 2
3 2 1 3 1
可行的着色方案數目為:6
=================================================================
測試數據
int n=5;
int m=5;
int[][] a={{-1,-1,-1,-1,-1,-1},{-1,0,1,1,1,0},{-1,1,0,1,1,1},{-1,1,1,0,1,0},{-1,1,1,1,0,1},{-1,0,1,0,1,0}};
輸出:
着色方案如下:
1 2 3 4 1
1 2 3 4 3
1 2 3 4 5
1 2 3 5 1
1 2 3 5 3
1 2 3 5 4
1 2 4 3 1
1 2 4 3 4
1 2 4 3 5
1 2 4 5 1
1 2 4 5 3
1 2 4 5 4
1 2 5 3 1
1 2 5 3 4
1 2 5 3 5
1 2 5 4 1
1 2 5 4 3
1 2 5 4 5
1 3 2 4 1
1 3 2 4 2
1 3 2 4 5
1 3 2 5 1
1 3 2 5 2
1 3 2 5 4
1 3 4 2 1
1 3 4 2 4
1 3 4 2 5
1 3 4 5 1
1 3 4 5 2
1 3 4 5 4
1 3 5 2 1
1 3 5 2 4
1 3 5 2 5
1 3 5 4 1
1 3 5 4 2
1 3 5 4 5
1 4 2 3 1
1 4 2 3 2
1 4 2 3 5
1 4 2 5 1
1 4 2 5 2
1 4 2 5 3
1 4 3 2 1
1 4 3 2 3
1 4 3 2 5
1 4 3 5 1
1 4 3 5 2
1 4 3 5 3
1 4 5 2 1
1 4 5 2 3
1 4 5 2 5
1 4 5 3 1
1 4 5 3 2
1 4 5 3 5
1 5 2 3 1
1 5 2 3 2
1 5 2 3 4
1 5 2 4 1
1 5 2 4 2
1 5 2 4 3
1 5 3 2 1
1 5 3 2 3
1 5 3 2 4
1 5 3 4 1
1 5 3 4 2
1 5 3 4 3
1 5 4 2 1
1 5 4 2 3
1 5 4 2 4
1 5 4 3 1
1 5 4 3 2
1 5 4 3 4
2 1 3 4 2
2 1 3 4 3
2 1 3 4 5
2 1 3 5 2
2 1 3 5 3
2 1 3 5 4
2 1 4 3 2
2 1 4 3 4
2 1 4 3 5
2 1 4 5 2
2 1 4 5 3
2 1 4 5 4
2 1 5 3 2
2 1 5 3 4
2 1 5 3 5
2 1 5 4 2
2 1 5 4 3
2 1 5 4 5
2 3 1 4 1
2 3 1 4 2
2 3 1 4 5
2 3 1 5 1
2 3 1 5 2
2 3 1 5 4
2 3 4 1 2
2 3 4 1 4
2 3 4 1 5
2 3 4 5 1
2 3 4 5 2
2 3 4 5 4
2 3 5 1 2
2 3 5 1 4
2 3 5 1 5
2 3 5 4 1
2 3 5 4 2
2 3 5 4 5
2 4 1 3 1
2 4 1 3 2
2 4 1 3 5
2 4 1 5 1
2 4 1 5 2
2 4 1 5 3
2 4 3 1 2
2 4 3 1 3
2 4 3 1 5
2 4 3 5 1
2 4 3 5 2
2 4 3 5 3
2 4 5 1 2
2 4 5 1 3
2 4 5 1 5
2 4 5 3 1
2 4 5 3 2
2 4 5 3 5
2 5 1 3 1
2 5 1 3 2
2 5 1 3 4
2 5 1 4 1
2 5 1 4 2
2 5 1 4 3
2 5 3 1 2
2 5 3 1 3
2 5 3 1 4
2 5 3 4 1
2 5 3 4 2
2 5 3 4 3
2 5 4 1 2
2 5 4 1 3
2 5 4 1 4
2 5 4 3 1
2 5 4 3 2
2 5 4 3 4
3 1 2 4 2
3 1 2 4 3
3 1 2 4 5
3 1 2 5 2
3 1 2 5 3
3 1 2 5 4
3 1 4 2 3
3 1 4 2 4
3 1 4 2 5
3 1 4 5 2
3 1 4 5 3
3 1 4 5 4
3 1 5 2 3
3 1 5 2 4
3 1 5 2 5
3 1 5 4 2
3 1 5 4 3
3 1 5 4 5
3 2 1 4 1
3 2 1 4 3
3 2 1 4 5
3 2 1 5 1
3 2 1 5 3
3 2 1 5 4
3 2 4 1 3
3 2 4 1 4
3 2 4 1 5
3 2 4 5 1
3 2 4 5 3
3 2 4 5 4
3 2 5 1 3
3 2 5 1 4
3 2 5 1 5
3 2 5 4 1
3 2 5 4 3
3 2 5 4 5
3 4 1 2 1
3 4 1 2 3
3 4 1 2 5
3 4 1 5 1
3 4 1 5 2
3 4 1 5 3
3 4 2 1 2
3 4 2 1 3
3 4 2 1 5
3 4 2 5 1
3 4 2 5 2
3 4 2 5 3
3 4 5 1 2
3 4 5 1 3
3 4 5 1 5
3 4 5 2 1
3 4 5 2 3
3 4 5 2 5
3 5 1 2 1
3 5 1 2 3
3 5 1 2 4
3 5 1 4 1
3 5 1 4 2
3 5 1 4 3
3 5 2 1 2
3 5 2 1 3
3 5 2 1 4
3 5 2 4 1
3 5 2 4 2
3 5 2 4 3
3 5 4 1 2
3 5 4 1 3
3 5 4 1 4
3 5 4 2 1
3 5 4 2 3
3 5 4 2 4
4 1 2 3 2
4 1 2 3 4
4 1 2 3 5
4 1 2 5 2
4 1 2 5 3
4 1 2 5 4
4 1 3 2 3
4 1 3 2 4
4 1 3 2 5
4 1 3 5 2
4 1 3 5 3
4 1 3 5 4
4 1 5 2 3
4 1 5 2 4
4 1 5 2 5
4 1 5 3 2
4 1 5 3 4
4 1 5 3 5
4 2 1 3 1
4 2 1 3 4
4 2 1 3 5
4 2 1 5 1
4 2 1 5 3
4 2 1 5 4
4 2 3 1 3
4 2 3 1 4
4 2 3 1 5
4 2 3 5 1
4 2 3 5 3
4 2 3 5 4
4 2 5 1 3
4 2 5 1 4
4 2 5 1 5
4 2 5 3 1
4 2 5 3 4
4 2 5 3 5
4 3 1 2 1
4 3 1 2 4
4 3 1 2 5
4 3 1 5 1
4 3 1 5 2
4 3 1 5 4
4 3 2 1 2
4 3 2 1 4
4 3 2 1 5
4 3 2 5 1
4 3 2 5 2
4 3 2 5 4
4 3 5 1 2
4 3 5 1 4
4 3 5 1 5
4 3 5 2 1
4 3 5 2 4
4 3 5 2 5
4 5 1 2 1
4 5 1 2 3
4 5 1 2 4
4 5 1 3 1
4 5 1 3 2
4 5 1 3 4
4 5 2 1 2
4 5 2 1 3
4 5 2 1 4
4 5 2 3 1
4 5 2 3 2
4 5 2 3 4
4 5 3 1 2
4 5 3 1 3
4 5 3 1 4
4 5 3 2 1
4 5 3 2 3
4 5 3 2 4
5 1 2 3 2
5 1 2 3 4
5 1 2 3 5
5 1 2 4 2
5 1 2 4 3
5 1 2 4 5
5 1 3 2 3
5 1 3 2 4
5 1 3 2 5
5 1 3 4 2
5 1 3 4 3
5 1 3 4 5
5 1 4 2 3
5 1 4 2 4
5 1 4 2 5
5 1 4 3 2
5 1 4 3 4
5 1 4 3 5
5 2 1 3 1
5 2 1 3 4
5 2 1 3 5
5 2 1 4 1
5 2 1 4 3
5 2 1 4 5
5 2 3 1 3
5 2 3 1 4
5 2 3 1 5
5 2 3 4 1
5 2 3 4 3
5 2 3 4 5
5 2 4 1 3
5 2 4 1 4
5 2 4 1 5
5 2 4 3 1
5 2 4 3 4
5 2 4 3 5
5 3 1 2 1
5 3 1 2 4
5 3 1 2 5
5 3 1 4 1
5 3 1 4 2
5 3 1 4 5
5 3 2 1 2
5 3 2 1 4
5 3 2 1 5
5 3 2 4 1
5 3 2 4 2
5 3 2 4 5
5 3 4 1 2
5 3 4 1 4
5 3 4 1 5
5 3 4 2 1
5 3 4 2 4
5 3 4 2 5
5 4 1 2 1
5 4 1 2 3
5 4 1 2 5
5 4 1 3 1
5 4 1 3 2
5 4 1 3 5
5 4 2 1 2
5 4 2 1 3
5 4 2 1 5
5 4 2 3 1
5 4 2 3 2
5 4 2 3 5
5 4 3 1 2
5 4 3 1 3
5 4 3 1 5
5 4 3 2 1
5 4 3 2 3
5 4 3 2 5
可行的着色方案數目為:360*/