(Java数据结构和算法)拓扑排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ccnuacmhdu/article/details/84455209

参考博文

拓扑排序


public class Main {

	public static void main(String[] args){
		System.out.println("请输入一个图的邻接矩阵(8X8):");
		int[][] map = new int[8][8];
		int[] inDegree = new int[8];
		for(int i = 0;  i < 8; i++){
			inDegree[i] = 0;
		}
		
		java.util.Scanner scan = new java.util.Scanner(System.in);
		for(int i = 0; i < 8; i++){
			for(int j = 0; j < 8; j++){
				map[i][j] = scan.nextInt();
				if(map[i][j] == 1){
					inDegree[j]++; 
				}
			}
		}

		String str = "abcdefgh";//使得字母和对应的下标数字对应
		//拓扑排序
		//每次干掉一个节点,最多干8次,8次干不完,说明有环
		for(int i = 0; i < 8; i++){
			//找一个入度是0的节点,干掉
			for(int j = 0; j < 8; j++){
				if(inDegree[j] == 0){
					inDegree[j]--;
					System.out.print(str.charAt(j)+" ");
					//并删除以j为起点的边
					for(int k = 0; k < 8; k++){
						if(map[j][k] == 1){
							inDegree[k]--;
						}
					}
					break;
				}
				
			}
		}
		System.out.println();
	}
}

猜你喜欢

转载自blog.csdn.net/ccnuacmhdu/article/details/84455209