Задача взята с сайта e-olymp.com.
Условие
Дан простой неориентированный невзвешенный граф. Требуется для каждой вершины подсчитать ее степень.
Входные данные
В первой строчке находится число . В следующих строчках находится матрица смежности.
Выходные данные
Выведите чисел – степени всех вершин.
Тесты :
Ввод | Вывод |
2 0 1 1 0 |
1 1 |
3 0 1 0 1 0 1 0 1 0 |
1 2 1 |
3 0 1 0 1 1 1 0 1 0 |
1 4 1 |
5 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 |
6 1 6 1 6 |
5 0 0 1 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 0 1 0 0 0 1 |
1 3 4 3 3 |
5 0 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 1 0 |
4 1 4 1 4 |
5 1 0 0 0 1 0 1 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 |
3 3 2 1 1 |
Код на 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 |
import java.util.*; import java.lang.*; import java.io.*; class Main { public static void main (String[] args) throws java.lang.Exception { int N; Scanner scan = new Scanner(System.in); N = scan.nextInt(); String strout = new String(); for (int i = 0; i < N; i++) { int counter = 0; int x; for (int j = 0; j < N; j++) { x = scan.nextInt(); if (x > 0) counter += (i == j? 2 : 1); } strout += counter + " "; } System.out.print(strout); } } |
Алгоритм:
Для решении задачи даже не нужно запоминать значения элементов матрицы. Выполняем данные действия раз, для каждой строки матрицы. Храним ответ в переменной , изначально . По очереди считываем все ее элементы и, если текущий элемент равен , то прибавляем степени , если элемент принадлежит главной диагонали (так как тогда это ребро является петлей, а при подсчете степени ребро-петля учитывается дважды), иначе прибавляем . Формируем строку-результат и выводим её.
Ссылки:
Рабочий код для тестирования на Ideone.com: Ideone.com
Ошибка компиляции. Похоже Вы не весь код перенесли в отчёт.
Исправил
Можно ускорить в два раза если читать строку целиком и считать в ней единицы. Тогда решение укладывается в лимит времени.
Если же аккуратно сделать тоже самое на С++, то можно легко побить все рекорды скорости по этой задаче.
Спасибо, так действительно быстрее работает. Подправить пост или оставить все как есть?