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

这是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]);
				}				
			}		
		}
		
	}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YuYunTan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值