Среда для сотрудничества онлайн (не только dev ориентированный) [закрытый]

Я использовал алгоритм дигестры для вычисления кратчайшего пути. Вы можете попробовать это

    Set<String> addressSet = your AddressSet;

       int[][] adjacencyMatrix = prepareAdjacencyMatrix(employee, addressSet);

       return new CalculateShortestPath(adjacencyMatrix.length - 1)
                        .calculate(adjacencyMatrix, 1);


      private int[][] prepareAdjacencyMatrix(Employee employee,
                                                   Set<String> addressSet) {
                List<String> addressList = new ArrayList<>();
                addressList.addAll(addressSet);

                int l = addressSet.size();
                int[][] adjacencyMatrix = new int[l + 1][l + 1];

                for (int i = 1; i <= l; i++) {
                    for (int j = 1; j <= l; j++) {
                        if (i == j) {
                            adjacencyMatrix[i][j] = Integer.MAX_VALUE;
                        } else {
                            String key = getAddressKey(addressList.get(i - 1), addressList.get(j - 1), employee.getTransport());
                            String reverseKey = getAddressKey(addressList.get(j - 1), addressList.get(i - 1),
                                    employee.getTransport());

                            if (distanceMatrix.containsKey(key)) {
                                adjacencyMatrix[i][j] = 0;

                            } else if (distanceMatrix.containsKey(reverseKey)) {
                                adjacencyMatrix[i][j] = 0;
                            }
                        }
                    }
                }
                return adjacencyMatrix;
            }

private String getAddressKey(String sourceCity,
                                 String destinationCity, MeansOfTransport transport) {
        return sourceCity + "-" + destinationCity + "-" +
                (nonNull(transport) ? transport.getName() : MeansOfTransport.DRIVING.getName());
    }

            public class CalculateShortestPath {
            private int distances[];
            private Set<Integer> settled;
            private Set<Integer> unsettled;
            private int number_of_nodes;
            private int adjacencyMatrix[][];

            public CalculateShortestPath(int number_of_nodes) {
                this.number_of_nodes = number_of_nodes;
                distances = new int[number_of_nodes + 1];
                settled = new HashSet<>();
                unsettled = new HashSet<>();
                adjacencyMatrix = new int[number_of_nodes + 1][number_of_nodes + 1];
            }

            private void dijkstra_algorithm(int adjacency_matrix[][], int source) {
                int evaluationNode;
                for (int i = 1; i <= number_of_nodes; i++) {
                    System.arraycopy(adjacency_matrix[i], 1, adjacencyMatrix[i], 1, number_of_nodes);
                }

                for (int i = 1; i <= number_of_nodes; i++) {
                    distances[i] = Integer.MAX_VALUE;
                }

                unsettled.add(source);
                distances[source] = 0;
                while (!unsettled.isEmpty()) {
                    evaluationNode = getNodeWithMinimumDistanceFromUnsettled();
                    unsettled.remove(evaluationNode);
                    settled.add(evaluationNode);
                    evaluateNeighbours(evaluationNode);
                }
            }

            private int getNodeWithMinimumDistanceFromUnsettled() {
                Iterator<Integer> iterator = unsettled.iterator();
                int node = iterator.next();
                int min = distances[node];
                for (int i = 1; i <= distances.length; i++) {
                    if (unsettled.contains(i)) {
                        if (distances[i] <= min) {
                            min = distances[i];
                            node = i;
                        }
                    }
                }
                return node;
            }

            private void evaluateNeighbours(int evaluationNode) {
                int edgeDistance = -1;
                int newDistance = -1;

                for (int destinationNode = 1; destinationNode <= number_of_nodes; destinationNode++) {
                    if (!settled.contains(destinationNode)) {
                        if (adjacencyMatrix[evaluationNode][destinationNode] != Integer.MAX_VALUE) {
                            edgeDistance = adjacencyMatrix[evaluationNode][destinationNode];
                            newDistance = distances[evaluationNode] + edgeDistance;
                            if (newDistance < distances[destinationNode]) {
                                distances[destinationNode] = newDistance;
                            }
                            unsettled.add(destinationNode);
                        }
                    }
                }
            }

            public int calculate(int[][] adjacency_matrix, int source) {
                int shortestPath = Integer.MAX_VALUE;

                try {
                    dijkstra_algorithm(adjacency_matrix, source);

                    for (int i = 1; i <= distances.length - 1; i++) {
                        if (distances[i] > 0 && distances[i] < shortestPath) {
                            shortestPath = distances[i];
                        }

                    }
                } catch (InputMismatchException inputMismatch) {
                    System.out.println("Wrong Input Format");
                }

                return shortestPath;
            }
        }
5
задан Theo.T 11 March 2009 в 11:26
поделиться

6 ответов

Assembla является хорошим вариантом. Можно попробовать devjavu также. Я использовал их обоих в течение нескольких лет, devjavu имеет более чистую среду.

Я видел 'SVN-trac в действии' в двух проектах, среди которых я работал с разработчиками, менеджерами проектов, людьми, которые не имели никакого предыдущего контакта с системой управления версиями. Они использовали наиболее распространенные функции без проблем, я не думаю, что это должно быть большое беспокойство, если у Вашей команды могло бы быть 2-часовое обучение об основном понятии управления версии с подверсией.

Править:

Существует страница сравнения на этом предмете, это должен быть хороший ресурс. В случае, если это не, по крайней мере, у них есть большая сумма ссылок на svn услуги хостинга.;)

3
ответ дан 14 December 2019 в 04:48
поделиться

Я использовал в течение почти двух лет теперь Неопьянение.

Это превосходно. Это делает SVN, и МЕРЗАВЕЦ, размещающий, не экономит на пространстве онлайн, имеет встроенную ошибку/отслеживание ошибки (может импортировать из Trac), И интегрированный с SVN, имеет Wiki, мини-форумы, отслеживание времени... все же это очень просто в использовании и имеет негиковский интерфейс.

Это также имеет чистый API. Я делаю резервное копирование (они делают это автоматически также, но я супер осторожен со своими данными) с помощью простого сценария Powershell.

Они очень ориентированы на клиента: после того как мне были нужны они для импорта SVN repo, я имел до, и они ответили и сделали работу в половине или около этого.

Существует несколько предлагаемых уровней обслуживания от свободного до умеренно дорогого. Я сказал бы, что полные цены очень разумны.

У меня нет ничего для отказа, и никоим образом не связан, просто очень счастливый клиент.

1
ответ дан 14 December 2019 в 04:48
поделиться

Это не может быть идеальным пригодным для того, что Вы ищете, но Вы рассмотрели код Google? Отслеживание ошибок, управление версиями, Wiki. Это даже свободно.

1
ответ дан 14 December 2019 в 04:48
поделиться

Я рекомендовал бы Слияние. Это гибко, и доступное размещенный и неразмещенный. Это - Wiki в ядре, но это имеет хорошее управление версиями для страниц, а также вложений. Это отслеживает то, кто изменяет то, что, и система разрешения позволяет Вам указывать, кто видит что (например, для предоставления клиентского доступа, но только к соответствующим областям). Это имеет хорошие опции интеграции, такие как удаленный API-интерфейс, интерфейс WebDAV, и существует много плагинов, доступных для функциональности, не включенной по умолчанию.

Вы могли также взглянуть на Jira, который более полезен для управления проектами.

Нет, я не работаю на atlassian.

1
ответ дан 14 December 2019 в 04:48
поделиться

Я использую SVN+TRAC+MediaWIKI в качестве основного инструмента для всего взаимодействия между всеми цепочками процесса разработки.

Разработчики используют SVN для управления версиями, TRAC для контроля проблем отчет QA и WIKI как источник требования и технической документации.

Использование QA TRAC для того, чтобы сообщить о проблемах и WIKI для как источник рабочих процессов и требований. Премьер-министры и TLS используют TRAC для создания burndown отчеты и WIKI как источник всего вида документации.

Высшее руководство видит верхнюю часть айсберга, визуализируемого burndown графикой.

Таким образом, я могу рекомендовать использовать TRAC с интеграцией с SVN и MediaWIKI. Все свободно. Существует усилие только некоторого времени, требуемое выполнять его.

0
ответ дан 14 December 2019 в 04:48
поделиться

Вы ищете размещенный или неразмещенный? Мы используем redmine, альтернативу Trac, который был бризом, чтобы установить и использовать. UI прост и интуитивен. Довольно гибкий с конфигурацией, позволяет несколько проектов, интеграция Управления исходным кодом (для SVN, мерзавца, CVS, всех общих), интегрированная Wiki, форумы, файлы, и т.д. Другие имена для бросания вокруг включают неопьянение, jira, маяк и приложение фильтра.

2
ответ дан 14 December 2019 в 04:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: