인접 행렬 생 성 그림

2702 단어
인접 행렬 생 성 그림 에 사용 되 는 2 차원 배열 생 성 그림 은 순서 저장 구조 로 이 루어 집 니 다.
인접 행렬 이 그림 을 만 드 는 과정 은 바로 2 차원 배열 에 값 을 부여 하 는 과정 이다.
그림 의 데이터 구조:
public class Graph {
    String[] vertex = new String[5];    //        
    int[][] edge = new int[5][5];       //        
    .... //    ,  get,set  
}

구현 및 테스트:
public class GraphApp {

    public static void main(String[] args){
        Graph g = createGraphByMatrix();
        printGraph(g);
    }

    /**
     *        
     *      {A,B,C,D,E}
     *    {(A,B),(B,C),(C,D),(D,E),(E,A),(A,C)} ->{(0,1),(1,2),(2,3),(3,4),(4,1),(0,2)}
     *               
     */
    public static Graph createGraphByMatrix(){
        Graph g = new Graph();
        Scanner sc = new Scanner(System.in);
        //     ,        
        for(int i = 0; i < g.getVertex().length; i++){
            System.out.println("      :");
            String vertexName = sc.next();
            g.getVertex()[i] = vertexName;
        }
        //       
       for(int i = 0; i < g.getVertex().length; i++){
            for(int j = 0; j < g.getVertex().length; j++){
                g.getEdge()[i][j] = 0;             //                0             
            }
       }

       //    
        System.out.println("    :");
        int edgeNum = sc.nextInt();
        int edgeMaxNum = g.getVertex().length * (g.getVertex().length-1)/2;  //         n*(n-1)/2
        if(edgeNum > edgeMaxNum){
            System.out.println("              !");
            System.exit(0);
        }
       //       
        for(int i = 0; i < edgeNum; i++){
            System.out.println("   (vi,vj)    i");
            int edgI = sc.nextInt();
            System.out.println("   (vi,vj)    j");
            int edgJ = sc.nextInt();
            System.out.println("   (vi,vj)    :");
            int weight = sc.nextInt();
            g.getEdge()[edgI][edgJ] = weight;
            g.getEdge()[edgJ][edgI] = weight;       //        a[i][j] = a[j][i]

        }
        return g;
    }

    private static void printGraph(Graph g){
        for(int i = 0; i < g.getVertex().length; i++){
            System.out.print(g.getVertex()[i] + "   ");
        }
        System.out.println();
        for(int i = 0; i < g.getVertex().length; i++){
            for(int j = 0; j < g.getVertex().length; j++){
                System.out.print(g.getEdge()[i][j] +"   ");
            }
            System.out.println();;
        }
    }
}

인쇄 결과:
A   B   C   D   E    0   1   6   0   0    1   0   2   0   5    6   2   0   3   0    0   0   3   0   4    0   5   0   4   0

좋은 웹페이지 즐겨찾기