改造DFS算法计算无向图的连通分量(java算法)

来源:互联网 发布:淘宝食品新规 编辑:程序博客网 时间:2024/05/21 11:20

这是java的eclipse做的程序的源代码,编译成功,测试也正确。下面不多说,附代码:

package DNFLTFZ;public class DFSLT {/** * 这里是注释文档 *  * S表示无穷大 *  * 连通分量设置为3个 *   0 1 2 3 4 5 6 7 8 * ------------------------- * 0  * 1   s s s s s s s s * 2   s s s 1 1 s s s * 3   s s s s s 1 1 s * 4   s 1 s s s s s 1 * 5   s 1 s s s s s 1 * 6   s s 1 s s s 1 s * 7   s s 1 s s 1 s s * 8   s s s 1 1 s s s * *  * @param args */static int color[];static int d =0;public static void main(String[] args) {int s = Integer.MAX_VALUE;int G[][]={{s,s,s,s,s,s,s,s,s},   {s,s,s,s,s,s,s,s,s},   {s,s,s,s,1,1,s,s,s},   {s,s,s,s,s,s,1,1,s},   {s,s,1,s,s,s,s,s,1},   {s,s,1,s,s,s,s,s,1},   {s,s,s,1,s,s,s,1,s},   {s,s,s,1,s,s,1,s,s},   {s,s,s,s,1,1,s,s,s}};color = new int [9];ProcedureDFS(G,9);PDLTGS(color);}private static void PDLTGS(int[] color2) {// TODO 自动生成的方法存根int temp;for(int i=1;i<color2.length;i++){for(int j=color2.length-2;j>=1;j--){if(color2[j+1]<color2[j]){temp=color2[j+1];color2[j+1]=color2[j];color2[j]=temp;}}}for(int i=1;i<color2.length-1;i++){if(color2[i+1]!=color2[i])d++;}System.out.println("连通分量的个数:"+(d+1));}public static void ProcedureDFS(int [][]G,int n){//图是以二维数组的形式保存//n是二维数组的维数,n需要小于10,结果才会正确,否则算法上,初始化没搜索就需要换一个数字for(int i=1;i <= n-1;i++){color[i]=10;//把每一个顶点都置为10,表示还没搜索}for(int i=1;i<= n-1;i++){//对于每一个顶点没被访问的顶点进行访问if(color[i] == 10){color[i]=i;DFS_visit(G,i,color[i]);//遍历其访问的顶点}}}private static void DFS_visit(int[][] g, int i, int color2) {for(int t=1;t<= g.length-1;t++){//邻接点没有被访问到if(color[t] == 10 && g[i][t] != Integer.MAX_VALUE){color[t] = color2;DFS_visit(g,t,color[t]);}}}}

1 0
原创粉丝点击