Найдите все вершины графа, которые являются истоками, и все его вершины, которые являются стоками - C#
Формулировка задачи:
Напомним, что вершина ориентированного графа называется истоком, если в нее не входит ни одно ребро и стоком, если из нее не выходит ни одного ребра.
Ориентированный граф задан матрицей смежности. Найдите все вершины графа, которые являются истоками, и все его вершины, которые являются стоками.
Формат входных данных
Сначала вводится число n ( 1<=n<=100) – количество вершин в графе, а затем n строк по n чисел, каждое из которых равно 0 или 1, – его матрица смежности.Формат выходных данных
В первой строке выведите k – число истоков в графе и затем k чисел – номера вершин, которые являются истоками, в возрастающем порядке. Во второй строке выведите информацию о стоках в том же порядке.входные данные
4 1 0 0 1 0 0 0 0 1 1 0 1 0 0 0 0выходные данные
1 3 2 2 4 помогите,пожалуйста,реализовать эту задачу,как я понял надо посчитать количество пустых строк по горизонтали и вертикале,а потом вывести их номера,но сам не могу реализовать. заранее спасибо.Решение задачи: «Найдите все вершины графа, которые являются истоками, и все его вершины, которые являются стоками»
textual
Листинг программы
// матрица смежности (квадратная) int[,] m = { { 1, 0, 0, 1 }, { 0, 0, 0, 0 }, { 1, 1, 0, 1 }, { 0, 0, 0, 0 } }; int n = m.GetLength(0); var истоки = new string[n]; var стоки = new string[n]; int истоки_sz = 0, стоки_sz = 0; for (int i = 0; i < n; i++) { int row = 0, col = 0; for (int j = 0; j < n && (row & col) == 0; j++) { row |= m[i, j]; col |= m[j, i]; } if (row == 0) истоки[истоки_sz++] = (i + 1).ToString(); if (col == 0) стоки[стоки_sz++] = (i + 1).ToString(); } Console.WriteLine("{0} {1}", истоки_sz, String.Join(" ", истоки, 0, истоки_sz)); Console.WriteLine("{0} {1}", стоки_sz, String.Join(" ", стоки, 0, стоки_sz));
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д