通过邻接矩阵java的简单连通图

时间:2014-05-06 16:27:09

标签: java graph adjacency-matrix

我正在尝试使用邻接矩阵制作一个程序,该程序决定图表是否简单连接。我设法让代码告诉我所有节点都有链接到某些东西,但这并不能保证我在第一个节点和最后一个节点之间有一条路(简单连接图的定义)。我是初学者,所以我不知道这样的问题是否可以在这里发布。不知道怎么能这样做?到目前为止,这是我的代码。任何建议表示赞赏。

package lab41;

import java.util.Scanner;

public class Graf {

    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("Introduceti nr de noduri:");
        int n = s.nextInt();
        int[][] a = new int[n + 1][n + 1];
        int i, j, k;
        System.out.println("Introduceti matricea adiacenta:");

        for (i = 1; i <= n; i++)
            for (j = 1; j <= n; j++) {
                System.out.println("a[" + i + "][" + j + "]=");
                a[i][j] = s.nextInt();
            }

        int x = 0;
        j = 1;
        i = 1;
        do {
            if (a[i][j] == 1) {
                i++;
                j = 1;
                x++;
            } else
                j++;

        }
        while (i < n && j <= n);

        if (x == n - 1)
            System.out.println("Graful este conex");
        else
            System.out.println("Graful nu este conex");
    }


}

1 个答案:

答案 0 :(得分:0)

要查找图表是否已连接,您可以执行DFS&amp; BFS从任何节点开始,如果访问了所有节点,则表示图形已连接。

算法:

  1. 分配列表,visitedNodes = {}和queue = {}
  2. 选择任何节点,比如节点0。
  3. 从节点0开始BFS。队列= {节点0}
  4. 弹出队列的头部,说Node是x。如果节点x在visitedNodes中,请转到步骤3.否则将x放入visitedNodes列表中。
  5. 访问Node x的所有邻居,并将它们放入队列
  6. 继续执行步骤3到5,直到队列为空