检查简单图形是否面向?

时间:2016-11-24 16:39:00

标签: java

任务是

  

"你有一个邻接矩阵(nxn)。而简单的图形。如果图形是无向的,则打印是,否则打印否。"

我的老师说程序不正确。为什么呢?

import java.util.Scanner;

public class Graph {

    private static Scanner scan;

    public static void main(String[] args){
        scan = new Scanner(System.in);
        final int n = scan.nextInt();

        Graph graph = new Graph();
        int[][] matrix = graph.createMatrix(n);
        boolean truth = graph.checkoriented(matrix);
        System.out.println((truth)? "Yes": "No");

        scan.close();
    }

    private boolean checkoriented(int[][] matrix) {
        for(int i = 0; i < matrix.length; i++){
            for(int j = 0; j < matrix.length; j++){
                if(matrix[i][j] == 1){                  //look if  element on i pow, j column is "1";
                    boolean way = (matrix[j][i] == 1)? true: false; //if element on j pow i locumn is 1 also 
                    if(!way) return false;          // if element on j pow i locumn is 0 graph is oriented
                }
            }
        }
        return true;
    }

    private int[][] createMatrix(int n) {
        int[][] matrix = new int[n][n];
        for(int i = 0; i < n; i++){
            for(int j = 0; j < n; j++){
                matrix[i][j] = scan.nextInt();
            }
        }
        return matrix;
    }

}

2 个答案:

答案 0 :(得分:1)

我不知道这实际上是否有问题,但如果您的输出应为YESNO,则最好打印这些而不是Yes和{{1} } No P. S.如果你的图表有从顶点到同一个图形的路径(我的意思是System.out.println((truth)? "Yes": "No");),你的算法可能会认为图形是无向的,而不是。

答案 1 :(得分:1)

根据讨论和A. Yurchenko的意见,我更新了答案的完整性(仅限)。

private boolean checkoriented(int[][] matrix) {

    for(int i = 0; i < matrix.length; i++){
        for(int j = 0; j < matrix.length; j++){
            if(i == j && matrix[i][j] !=0) {
                return false;
            }

            if (matrix[i][j] != matrix[j][i]) {
                return false;
            }
        }
    }

    return true;
}