java中的网格和邻接矩阵

时间:2014-01-28 15:17:43

标签: java algorithm matrix grid adjacency-matrix

我的编程需要一些帮助。

我想创建一个包含n列和n行的网格。 A也想显示或打印邻接矩阵。开始时我确实创建了一些代码,但结果不正确,我不知道热修复它。我需要这个网格来计算最短路径,这个网格的变异,......

第一个for循环创建一个漂亮的网格大小n*n,但我不知道如何在naighbour节点之间创建链接。第二个代码(在评论中,创建一个邻接矩阵,但不是correnct - >节点3-4,7-8,11-12不应该连接(如果我们有4x4网格),并且在此代码中缺少最后4个节点(如果n=4)。

有人能告诉我编码失败的地方吗?)?

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Network_1 {
    public static void main(String[] args) throws Exception {
        BufferedReader input1 = new BufferedReader(new InputStreamReader(
                System.in));
        System.out.println("Enter the number of columns/rows");
        int cols = Integer.parseInt(input1.readLine());
        input1.close();
        int N = cols * cols;
        int[][] A = new int[N][N];

        for (int i = 0; i < N; i++) {
            if (i > 1
                    && ((cols == 0 && N % i == 0) || (cols > 0 && i % cols == 0))) {
                if (cols == 0) {
                    cols = i;
                }
                System.out.print("\n");
            }
            System.out.format("%3d", i);
        }
        System.out.println("\nAdjacency matrix:");

        for(int i = 0; i < N; i++) {
            for(int j = 0; j < N; j++) {
                System.out.print(A[i][j] + " ");
            }
            System.out.println();
        }
/*      
// If I try to create my "grid" with this code, I do not get true results
// The Matrix is incorrect
    for(int i=0; i<N-cols; i++){
        for(int j=0; j<N-cols; j++){
            if((cols > 0) && (i % cols == 0)){
                A[i][i+1] = 0;
                A[i + 1][i] = 0;
            }else{
                A[i][i+1] = 1;
                A[i + 1][i] = 1;

                A[i][i+cols] = 1;
                A[i + cols][i] = 1;
            }               
        }
    }       
    System.out.println("Adjacency matrix2:");
    for(int i = 0; i < N; i++) {
        for(int j = 0; j < N; j++) {
            System.out.print(A[i][j] + " ");
        }
            System.out.println("");
    }
*/
    }
}

直升机。我做了一些其他方法,这对我来说非常好。我知道这不是最好的解决方案,但它现在才有意思。现在,我将如果真的有效......

public static int[][] make_grid(int cols) {
        int N = cols * cols;
        int[][] A = new int[N][N];

        for (int i = 0; i < N; i++) {
            A[i][i] = 0;
            int left= i - 1;
            int right= i + 1;
            int upper= i - cols;
            int bottom= i + cols;

            if (left> 0)
                A[i][left] = 1;

            if (rigft% cols != 0) {
                if (right< N)
                    A[i][right] = 1;
            }

            if (upper> 0)
                A[i][upper] = 1;
            if (bottom< N)
                A[i][bottom] = 1;
        }
        return A;
    }

0 个答案:

没有答案