Java:从文本文件中读取&&检查图表是否完整

时间:2016-02-06 19:36:27

标签: java algorithm

我完成了大部分的学校作业,但是我无法弄清楚如何从文本文件中读取,并且我对代码有一定的问题,我给出的任务是:

  

&#34;编写程序以读取名为“input.txt”的输入文件。文件   由几个图组成。每个图表都以包含的行开头   顶点数n,其中1 < n&lt; 200.每个顶点都标有   从0到n-1的数字。第二行包含边数   湖在此之后,每行包含两个顶点数的l行   代表边缘。 n = 0的输入标记输入的结束   并且不被处理。

     

您必须选择适当的数据结构来表示   图形。指示其完成/是否具有自循环/具有隔离   顶点&#34;   样本输入:

     

4

     

5

     

0 1

     

2 0

     

0 3

     

1 2

     

2 3

     

3

     

3

     

0 1

     

1 2

     

2 0

     

0

     

示例输出:

     

未完成/无自循环/无孤立顶点

     

完成/无自循环/无孤立顶点

我使用了邻接矩阵,我编写了读取边的代码,判断它是否有自循环以及是否存在孤立的顶点。

1-我写了一个代码,用于查明它是否完整,但它没有按照我想要的方式运行,它总是显示它不完整。

2-我不熟悉从文本文件中读取输入的方法,所以我需要帮助。

我必须让它读取任何数量的矩阵的部分,有点容易(但总是欢迎hehe),但我只是想确保在我之前知道如何执行上述两个步骤做到这一点,我真的很感激留下评论,所以我可以学到你帮助我的任何一步,无论如何,这是该计划:

package phase1project;
import java.util.Scanner;


public class Phase1Project {


public static void main(String[] args) {

    int max = 2000; //declare the max element for the array
    int[][] adj= new int[max][max]; //declare the array
    int n; //nodes
    int l; // to determine the max number of edges
    int loopChecker = 0;//To check whether there's a loop or not
    int isolatedCounter = 0;
    int completeCounter = 0;
    int subCounter = 0;
    int origin; //to determine where the edge starts
    int destination; //to detemine where the edge stops

    int i,j; //for the loop
    Scanner input = new Scanner(System.in); //to scan inputs

    System.out.println("Enter the number of vertices: ");
    n=input.nextInt();
    while(n<1 || n>200){ //nodes/vertices should be between 1 and 200
        System.out.println("\nWrong input! Insert a numbe between 1 and 200\n");
        n=input.nextInt();
    }

    System.out.println("Enter the number of edges: ");
    l=input.nextInt();

    System.out.println("Enter the begining of the edge then press enter then enter the end side of the edge to input it correctly.\n");

    for(i=0;i<=(l-1);i++){ //a loop that populates the adjacency matrix

        System.out.println("Enter edge "+i+": >> (0 0) to quit: ");
        origin = input.nextInt();
        destination = input.nextInt();

            adj[origin][destination]=1;
    }

    System.out.println("\n\n\nThis is how your graph looks like:\n");

    for(i=0;i<=(n-1);i++){
        for(j=0;j<=(n-1);j++)
            System.out.printf("%4d",adj[i][j]);
        System.out.printf("\n");
    }
    //////////////////////////////////////////////////////////////
    //Loop Checker starts from here
    for(i=0;i<=(n-1);i++){
        if(adj[i][i]==1){//If there's a 1 in the same place
            loopChecker=1;
            break;   
        }
    }

    if(loopChecker==1){
        System.out.println("Self Loop");
    }
    else{
        System.out.println("No Self Loop");
    }
    //Loop Checker ends here

    ///////////////////////////////////////////////////////////////
    //checks whether the graph is complete
    for(i=0;i<=(n-1);i++){
        subCounter=0;//reset
        for(j=0;j<=(n-1);j++){
            if(adj[i][j]==1){
                subCounter+=1;//buffer variable
            }
            if(subCounter==(n-1)){
                completeCounter+=1;//this counter incriments if the whole line has 1s that equal n-1
            }  
        }

    }

    if(completeCounter == n){
        System.out.println("Complete");
    }
    else
        System.out.println("Not Complete");
    //end of complete or not check
    /////////////////////////////////////////////////////////////////////


    subCounter =0;//reset
    //checks whether the graph has an isolated vertex or not
    for(i=0;i<=(n-1);i++){
        for(j=0;j<=(n-1);j++){
            if(adj[i][j]==0){
                subCounter+=1;//buffer variable
            }
            if(subCounter==n){
                isolatedCounter=1;
                break;
            }  
        }
        subCounter=0;//reset
    }

    if(isolatedCounter==1){
        System.out.println("There's an isolated vertex");
    }
    else
        System.out.println("There's no isolated vertex");
    //end of isolated check
    ///////////////////////////////////////////////////////////////////
}

}

我希望我没有通过发布这个来破坏任何规则,如果我这样做,请告诉我。

提前致谢;)

0 个答案:

没有答案