Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Помогите и объясните с задачей на dijkstra's algorithm / 2 сообщений из 2, страница 1 из 1
04.04.2015, 00:23
    #38926832
Benji
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите и объясните с задачей на dijkstra's algorithm
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
public class Maze {
    
    private static int[][] mazeArray = {
        {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},       // row is 8;
        {1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1},       // col is 16;
        {1, 0, 0, 0, 0, 0, 1, 2, 1, 1, 0, 1, 1, 0, 0, 0},
        {1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1},
        {1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1},
        {1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1},
        {1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
        {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1}};
    
    public static void main(String[] args) {
 
        solve(mazeArray);
    }
    
//-----------------------------------------------------------------------
    public static void solve(int[][] a) {
                      // база код
        boolean thereAreChanges = true; // dijkstra's algorithm
        int k = 2;
        while (thereAreChanges) {
            thereAreChanges = false;
            k++;
            for (int i = 0; i < a.length; i++) {
                for (int j = 0; j < a[i].length; j++) {
                    if (a[i][j] == 0) {
                        if (i < a.length - 1) {
                            if (a[i + 1][j] == k - 1) {
                                a[i][j] = k;
                                thereAreChanges = true;
                            }
                        }
                        if (i > 0) {
                            if (a[i - 1][j] == k - 1) {
                                a[i][j] = k;
                                thereAreChanges = true;
                            }
                        }
                        if (j < a[i].length - 1) {
                            if (a[i][j + 1] == k - 1) {
                                a[i][j] = k;
                                thereAreChanges = true;
                            }
                        }
                        if (j > 0) {
                            if (a[i][j - 1] == k - 1) {
                                a[i][j] = k;
                                thereAreChanges = true;
                            }
                        }
                    }
                }
            }
        }
//-----------------------------------------------------------------------
        // новая матрица
        int[][] maze1 = new int[8][16];
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                maze1[i][j] = a[i][j] - 2;
                
            }
        }
//-----------------------------------------------------------------------
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                if (a[i][j] == 1) {
                    System.out.print("##");
                }
                if (a[i][j] == 0) {
                    System.out.print("  ");
                }
                if (a[i][j] >= 2) {
                    System.out.printf("%2d",a[i][j] - 2);
                }
            }
            System.out.println();
//-----------------------------------------------------------------------
        }
    wayOut(maze1);
    }
//-----------------------------------------------------------------------
    public static void wayOut(int[][] maze1) {
        int out = 48;
        char wall = '#';
        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < 16; j++) {
                // две стены (выход)
                if( ((maze1[i-1][j] ==wall) &&(maze1[i+1][j] ==wall)) || ((maze1[i][j-1] ==wall)&&(maze1[i][j+1] ==wall)) ) { 
                    out = maze1[i][j];
                }
            }
        }
        System.out.println(out); //проверку не прошел именно здесь. Output выводит таблицу, но не выводит "выход" 11 (out = 11) . Мне нужно расставить точки the shortest path от нуля до кратчайшего пути, что делать?
    }
}
...
Рейтинг: 0 / 0
04.04.2015, 12:07
    #38926969
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите и объясните с задачей на dijkstra's algorithm
Обсуждение алгортма Дейкстры должно начинаться с терминологии.
Во первых Дейкста оперирует с вершинами графа, рёбрами и весами.

Если этих сущностей не видно в алгоритме то обсуждение Дейксты будет бесполезным
словесным флудом.

Если существует аналогия или некое подобие между графом и матрицей лабиринтом
то это надо декларировать. И договориться что клеточка - это вершина. И каждая
соседняя клетка имеет расстояние до соседа равное 1.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Помогите и объясните с задачей на dijkstra's algorithm / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]