我在使用Node数据结构时遇到了麻烦 - 尝试使用循环来提高效率

时间:2011-10-01 02:41:59

标签: java algorithm graph

所以我的代码有点问题。我的目标是从文件中获取一个邻接矩阵并将其输入到二维数组中。我能够做到这一点。现在我正在使用广度优先搜索和节点的数据结构来处理该数组。

现在,我正在尝试简单地创建新节点,但由于是char,我无法创建节点。在这里,让我发布我的完整代码。我将在下面发布错误。


package javaapplication1;
import java.io.*;
import java.util.*;
import tio.*;
import java.lang.*;



public class JavaApplication1 {
    private static int row = 0;
    private static int col = 0;
    private static int n = 20;
    private static int[][]adjMatrix = new int[n][n];


public static int[][] adjMatrix() throws FileNotFoundException, IOException{
   //int n = 20;
   //int row = 0;
   //int col = 0;
   //int[][]adjMatrix = new int[n][n];
   String file =   ("C:\\Users\\David\\Documents\\NetBeansProjects\\JavaApplication1\\src\\javaapplication1\\adjmatrix.txt");

   BufferedReader in = new BufferedReader(new FileReader(file));
   String line;
   //System.out.println(in.readLine());


   int k = 0;
     while ((line = in.readLine()) != null){
         //System.out.println(row);
         String[] temp = line.split("\\s+");
        for(col = 0; col < adjMatrix[row].length; col++){
           adjMatrix[row][col] = Integer.parseInt(temp[col]);
          // System.out.println(" " + temp[col] + " " + col);
        }
row++;
     }  //end while
   //System.out.print(array[4][1]);
   in.close();
   return adjMatrix;



} // endclass
 public static void main(String[] args)
    throws IOException{
    adjMatrix();
    // Create the nodes (20 based off adj matrix given
    Node nA =new Node('1');
    Node nB =new Node('2');
    Node nC = new Node('3');
    Node nD = new Node('4'); 
    Node nE = new Node('5');
    Node nF=new Node('6');
    Node nG=new Node('7');
    Node nH=new Node('8');
    Node nI=new Node('9');
    Node nJ=new Node('10');
    Node nK=new Node('11');
    Node nL=new Node('12');
    Node nM=new Node('13');
    Node nN=new Node('14');
    Node nO=new Node('15');
    Node nP=new Node('16');
    Node nQ=new Node('17');
    Node nR=new Node('18');
    Node nS=new Node('19');
    Node nT=new Node('20');


    // Create a graph, adding the nodes, and creating edges

    Graph g = new Graph();
    for (int i=1;i<=20;i++){
        String aString = Integer.toString(i);
        aString = n+aString;
        g.addNode(aString);
    }
//        g.addNode(nA);
//        g.addNode(nB);
//        g.addNode(nC);
//        g.addNode(nD);
//        g.addNode(nE);
//        g.addNode(nF);
//        g.addNode(nG);
//        g.addNode(nH);
//        g.addNode(nI);
//        g.addNode(nJ);
//        g.addNode(nK);
//        g.addNode(nL);
//        g.addNode(nM);
//        g.addNode(nN);
//        g.addNode(nO);
//        g.addNode(nP);
//        g.addNode(nQ);
//        g.addNode(nR);
//        g.addNode(nS);
//        g.addNode(nT);
//        g.addNode(nU);
//        g.setRootNode(nA); 

//        g.connectNode(nA,nB);
//        g.connectNode(nA,nD);
//        g.connectNode(nA,nE);
//        g.connectNode(nA,nF);
//        g.connectNode(nA,nG);
//        
//        g.connectNode(nB,nE);
//        g.connectNode(nB,nF);
//        g.connectNode(nB,nG);
//        
//        g.connectNode(nC, nD);
//        g.connectNode(nC,nE);
//        g.connectNode(nC,nF);
//        g.connectNode(nC,nG);
//        
//        g.connectNode(nD,nE);
//        g.connectNode(nD,nF);
//        
//        g.connectNode(nE, nF);
//        g.connectNode(nE,nG);
//        
//        g.connectNode(nF,nG);
//        
//        g.connectNode(nH, nI);
//        g.connectNode(nH,nJ);
//        g.connectNode(nH,nK);

//        g.connectNode(nI,nJ);
//        g.connectNode(nI,nK);
//        g.connectNode(nI,nL);




     g.bfs();


  } // end main
} // end class

我知道这是很多代码,但这就是为什么我真的不想暴力破坏g.connectNode和g.addNode。无论如何,我可以为此实现一个循环? 此外,当我开始做“Node nJ = new Node('10');”它给了我错误,因为我的节点是一个字符,任何关于绕过它而不破坏一切的建议?错误是一个未公开的字符文字。

以下是节点的代码。

public class Node {
    public char label;
    public boolean visited=false;
    public Node(char l)
    {
            this.label=l;
    }
}

感谢您的帮助,如果我需要编辑或添加任何内容,请与我们联系。

1 个答案:

答案 0 :(得分:1)

第一个建议:将你的节点放在一个数组或列表中,不要重复同样的事情20次。

将标签的数据类型更改为String,一切都会好的。

我不确定您如何定义Graph类。但您应该将addNode方法定义为

bool addNode(Node n)或类似的东西。

另一件事是将您的数据字段保密,并提供getter和setter。