一种求离散数学传递闭包的算法java实现详解编程语言

[Java]代码    

import java.util.Scanner; 
 
 
public class DiscreteMathematic {		 
	static int row,col,n; 
	static int a; 
	int b = 0; 
	private int[][] A; 
	private int[][]	B; 
	public static void main(String args[]) { 
		Scanner in = new Scanner(System.in); 
		System.out.println("请输入矩阵的行数"); 
		row = in.nextInt(); 
		System.out.println("请输入矩阵的列数"); 
		col = in.nextInt(); 
		System.out.println("请输入n的规模"); 
		n = in.nextInt(); 
		DiscreteMathematic x = new DiscreteMathematic(); 
		x.A = new int[row][col]; 
		System.out.println("请输入矩阵的元素(仅为0或1)"); 
		for(int i = 0; i < row; i++) { 
			System.out.print("请输入第" + (i+1) + "行的元素: "); 
			for(int j = 0; j < col; j++) { 
				a = in.nextInt(); 
				x.A[i][j] = a; 
			} 
		} 
		x.B = x.A; 
		x.echo(x); 
		x.pritn(x);	 
	} 
	//实现算法 
	void echo(DiscreteMathematic x) { 
		for(int num = 2; num <= n; num++) { 
			change(x); 
			for(int i = 0; i < row; i++) { 
				for(int j = 0; j < col; j++) { 
					if(x.A[i][j] == 1 || x.B[i][j] == 1) { 
						x.B[i][j] = 1; 
					} 
				} 
			} 
		} 
	} 
	//改变A的值 
	void change(DiscreteMathematic x) { 
			for(int i = 0; i < row; i++) { 
				for(int j = 0; j < col; j++) { 
					if(x.A[i][j] == 1) { 
						for(int k = 0; k < row; k++) { 
							if(x.B[j][k] == 1) { 
								x.A[i][k] = 1; 
							} 
						} 
					} 
				} 
			} 
		} 
	//在屏幕上打印出B 
	void pritn(DiscreteMathematic x) { 
		for(int i = 0;i < row; i++) { 
			for(int j = 0; j < col; j++) { 
				System.out.print(x.B[i][j]); 
				System.out.print(" "); 
			} 
			System.out.println(); 
		} 
	} 
} 

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/10217.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论