2016-11-15 33 views
0

我試圖創建一個程序,它從用戶採取了矩陣鄰接輸入,然後打印出的圖像這樣: 預期輸出:我想創建一個圖形使用矩陣鄰接輸入,任何想法?

A --->乙

乙--- >ç

ç--->一個

到目前爲止,我已經成功地打印鄰接矩陣輸入來自user.Here低於我的代碼,任何建議將是有益的:

import java.util.Scanner; 

public class Matrix_create { 

Scanner scan; 
int matrix[][]; 
int row, column; 

void create() { 

    scan = new Scanner(System.in); 

    System.out.println("Matrix Creation"); 

    System.out.println("\nEnter number of rows :"); 
    row = Integer.parseInt(scan.nextLine()); 

    System.out.println("Enter number of columns :"); 
    column = Integer.parseInt(scan.nextLine()); 

    matrix = new int[row][column]; 
    System.out.println("Enter the data :"); 

    for(int i=0; i<row; i++) { 

     for(int j=0; j<column; j++) { 

      matrix[i][j] = scan.nextInt(); 

     } 
    } 


    } 


void display() { 

    System.out.println("\nThe Matrix is :"); 

    for(int i=0; i<row; i++) { 

     for(int j=0; j<column; j++) { 

      System.out.print("\t" + matrix[i][j]); 
     } 
     System.out.println(); 
    } 
} 



public static void main(String args[]) { 

    Matrix_create obj = new Matrix_create(); 

    obj.create(); 
    obj.display(); 
} 
} 
+0

首先,強制矩陣輸入爲正方形('行==列')。然後,保留一個帶有字母的轉換數組(即'節點= [A,B,C ...]')。接下來走矩陣,當'矩陣[i] [j] == 1'這意味着我們有一個從節點[i]'到節點[j]'的鏈接。 – AlinG

回答

0

如果你只想打印出由鄰接矩陣表示的圖,在這裏你去: 說,這是表示與4個頂點的無向圖的鄰接矩陣:

0 1 1 0 
1 0 1 1 
1 1 1 0 
0 1 1 0 

讓我們寫一個方法將打印出圖的邊緣:

該方法應該做什麼?

  1. 該方法應該採取的兩個參數,一個是整數 鄰接矩陣和一個整數,表示節點的數量或在圖形的頂點 最大
  2. 在該方法內聲明character類型變量並將其初始化爲 它到65。因爲65是大寫字母A的ASCII值。 這應該是你的起始節點。 通過這樣做,您可以避免保留單獨的字母數組來跟蹤每個頂點。
  3. 開始迭代你的矩陣。現在,對於 迭代的每一行,創建另一個character類型變量並將其初始化爲 至65。這是您當前正在迭代的每個節點的末端節點。
  4. 經過這個刪節,開始遍歷每一列(的 矩陣代表起始節點,Column代表終止節點)。
  5. 在每一列迭代中,檢查邊是否爲1 .i.e matrix[row][col] != 0。如果邊緣不是0,請打印該邊緣。
  6. 遞增結束節點計數器。
  7. 結束列迭代
  8. 遞增開始節點計數器。
  9. 結束行迭代。

最後,該方法應該是這樣的:

public static void printGraph(int[][] matrix, int nodes){ 
     char startNode = 65; 
     for(int row = 0; row < nodes; row++){ 
      char endNode = 65; 
      for(int col = 0; col < nodes; col++){ 
       int edge = matrix[row][col]; 
       if(edge != 0){ 
        System.out.println(String.valueOf(startNode) + " --> " + String.valueOf(endNode)); 
       } 
       endNode++; 
      } 
      startNode++; 
     } 
    } 

這將產生以下輸出上述輸入矩陣:

注:每當你嘗試執行任何圖形相關的問題,我強烈建議你不是利用adjacency matrix。而是利用adjacency list來表示你的圖。因爲,鄰接矩陣需要O(V^2)空間,其中V是圖中頂點的數量。作爲一個鄰接表只需要O(E)空間,其中E是圖中邊的數量。

限制:如果圖中頂點的數量超過26,代碼將無法正常工作,因爲90之後的ASCII值將代表不同的符號。

我希望這有助於你的學習。

+0

嗨,謝謝你的幫助我理解了很多。你知道如何爲用戶輸入的任何矩陣鄰接做到這一點嗎? –

+0

您只需要使用'Scanner'接收輸入。首先輸入節點的數目'int節點',然後創建'矩陣[節點] [節點]'並採取單獨的'int'輸入。這跟你在做什麼一樣。然後將該矩陣和節點數傳遞給此方法。 –

+0

謝謝你,真的很感謝幫助 –