任务是
"你有一个邻接矩阵(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;
}
}
答案 0 :(得分:1)
我不知道这实际上是否有问题,但如果您的输出应为YES
或NO
,则最好打印这些而不是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;
}