这是我的两节课:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class TopoSort {

    public static void main(String[] args) throws FileNotFoundException {

        File textFile = new File("graphs.txt");
        Scanner in = new Scanner(textFile);


        int numGraphs = in.nextInt();
        for(int i=0;i<1;i++)
        {
            int nodeNum = in.nextInt();
            tsMakeGraph graph1 = new tsMakeGraph(nodeNum);

            int[][] adjArray = new int[nodeNum][nodeNum];
            for(int j=0;j<nodeNum;j++)
            {

                for(int k=0;k<nodeNum;k++)
                {
                    adjArray[j][k] = in.nextInt();
                }

                for(int n=0;n<nodeNum;n++)
                {
                    graph1.addNode(n);
                }


            }

            for(int j=0;j<nodeNum;j++)
            {
                for(int k=0;k<nodeNum;k++)
                {
                    if(adjArray[j][k] == 1)
                    {
                        graph1.makeEdge(j, k);
                    }
                }
            }

            graph1.topologicalSort();

        }
    }
}




import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;

public class tsMakeGraph {

    private Node nodeList[];
    private int adjMatrix[][];
    private int numNodes;
    private int topoArray[];

    public tsMakeGraph(int nodeNum) {
        nodeList = new Node[nodeNum];
        adjMatrix = new int[nodeNum][nodeNum];
        numNodes = 0;
        for (int i = 0; i < nodeNum; i++) {
            for (int k = 0; k < nodeNum; k++) {
                adjMatrix[i][k] = 0;
            }
        }
        topoArray = new int[nodeNum];
    }

    public void addNode(int i) {
        nodeList[numNodes++] = new Node(i);

    }
}


我通过for循环添加节点时遇到了超出范围的错误,但是如果我通过绑定graph1.addNode(0),graph1.addNode(2),graph1.addNode(3),graph1手动添加节点.addNode(numNodes),它将正常工作。这对我来说没有意义,我一直在绞尽脑汁哈哈。顺便说一句,我编辑了大部分拓扑图类,因为这是一个硬件项目。

最佳答案

缩短代码一点,您可以这样:

for(int j=0;j<nodeNum;j++)
{
    for(int n=0;n<nodeNum;n++)
    {
         graph1.addNode(n);
    }
}

public class tsMakeGraph {

    public tsMakeGraph(int nodeNum) {
        nodeList = new Node[nodeNum];
    }

    public void addNode(int i) {
        nodeList[numNodes++] = new Node(i);
    }
}


因此,这里发生的是您有一个包含nodeNum个元素的数组,但您尝试将其添加nodeNum^2次。

我无法告诉您告诉“正确”解决方案的目的。如果nodeList应具有与adjMatrix相同的元素数,则应像new Node[nodeNum * nodeNum]那样实例化它。 (与topoArray相同吗?)或者,如果nodeList应包含整数0...nodeNum-1,则应将其拉出嵌套循环。

08-06 02:42