powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Помогите и объясните с задачей на dijkstra's algorithm
2 сообщений из 2, страница 1 из 1
Помогите и объясните с задачей на dijkstra's algorithm
    #38926832
Benji
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
Помогите и объясните с задачей на dijkstra's algorithm
    #38926969
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обсуждение алгортма Дейкстры должно начинаться с терминологии.
Во первых Дейкста оперирует с вершинами графа, рёбрами и весами.

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

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


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