Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> система фундаментальных циклов 
:(
    Опции темы
Inka94
Дата 8.4.2012, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 4.3.2012

Репутация: нет
Всего: нет



Помогите пожалуйста! Надо написать программу для построения системы фундаментальных циклов.Мыслей ноль вообще,алгоритм примерно такой:
1.Определяем, связан ли граф (Если нет — циклов нет);
2.Строим матрицу смежности остовного дерева графа;
3.Устраиваем цикл по хордам;
4.Выводим список фундаментальных циклов графа.
Вся теперь проблема в реализации...Основная проблема в методе заполнения матрицы остовного дерева графа, заданного матрицей смежности. Есть вариант идти через списки,но т.к я новичок в этом мы это еще не изучали... ну естественно и дальше вся работа не идет.
Кто сталкивался с подобной проблемой помогите! Мож какие идеи есть?
PM MAIL   Вверх
Inka94
Дата 8.4.2012, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 4.3.2012

Репутация: нет
Всего: нет



вот начало я тут немного попробовала:

Код


public class Matrix {
public int[]GetMatrixAttainability(){// Метод, возвращающий матрицу достижимости
int[] mtxAtt;int[] mtxFrame;int [] mtxAdj;int vCount;
int[] matrix = (int[])mtxAdj.clone();// Создаем матрицу смежности с рефлексивным отношением
for (int i = 0; i<vCount; i++){
for (int j = 0; j<vCount; j++){
matrix[i][j] = 1; }
mtxAtt = matrix;// Создаем матрицу достижимости как матрицу смежности
for (int i=0;i<vCount;i++)// Запускаем цикл по количеству вершин
{
mtxAtt=Multiplication(mtxAtt,matrix);// Умножаем матрицу достижимости на матрицу смежности
}
for(int i=0;i<vCount;i++){ // "Нормируем" матрицу достижимости
for(int j=0;j<vCount;j++){
if(mtxAtt[i][j]!=0){// Если число матрицы отлично от 0
mtxAtt[i][j] =1;
}}}
return mtxAtt;}
}
public int[] Multiplication (int[]matrix1,int[]matrix2) {
int[] matrix = new int[vCount][vCount];// Создаем новую матрицу
for (int i = 0; i<matrix1.GetLength(0); i++){// Цикл по количеству строк 1 матрицы
for (int j = 0; j<matrix2.GetLength(1); j++){// Цикл по количеству столбцов 2 матрицы
for (int k = 0; k<matrix2.GetLength(0); k++){// Цикл по количеству строк 2 матрицы
matrix[i][j]= matrix1[i][k] * matrix2[k][j];// Получение [i,j] элемента итоговой матрицы
}}}
return matrix;// Возвращаем результат перемножения матриц
}
}


выдает ошибку =(
 array required but int found

Это сообщение отредактировал(а) Inka94 - 8.4.2012, 21:54
PM MAIL   Вверх
GZep
Дата 8.4.2012, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: нет
Всего: 32



Никто не будет ломать зрение на чтение такого кода.
Оформите по-человечески, тут есть тег код с подсветкой и текст ошибки не забудте.


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
Inka94
Дата 8.4.2012, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 4.3.2012

Репутация: нет
Всего: нет



Цитата(GZep @ 8.4.2012,  19:40)
Никто не будет ломать зрение на чтение такого кода.
Оформите по-человечески, тут есть тег код с подсветкой и текст ошибки не забудте.

Сделала.
PM MAIL   Вверх
toxx
Дата 8.4.2012, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 653
Регистрация: 4.3.2009
Где: НН

Репутация: 1
Всего: 13



Inka94
Плохо отформатировали
PM MAIL   Вверх
Inka94
Дата 8.4.2012, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 4.3.2012

Репутация: нет
Всего: нет



разобралась в чем прикол.Неправильно задала двумерный массив.Разбила на 2 класса,"связала" между собой.Теперь во втором методе возникает ошибка-"missing return statement"..
вот в общем состояние программы на данный момент.Насчет форматирования текста сори,сил уже больше ни на что нет )
1 класс:

Код

public class Matrix extends Un {
public int[][]GetMatrixAttainability(){// Метод, возвращающий матрицу достижимости
int[][] mtxAtt;int[][] mtxFrame;int [][] mtxAdj;int vCount;
int[][] matrix = (int[][])mtxAdj.clone();// Создаем матрицу смежности с рефлексивным отношением
for (int i = 0; i<vCount; i++){
matrix[i][i]= 1;
}
mtxAtt=matrix;// Создаем матрицу достижимости как матрицу смежности
for (int i = 0; i<vCount; i++) {// Запускаем цикл по количеству вершин
mtxAtt=Multiplication(mtxAtt, matrix);// Умножаем матрицу достижимости на матрицу смежности
}
for(int i=0;i<vCount;i++){ // "Нормируем" матрицу достижимости
for(int j=0;j<vCount;j++){
if(mtxAtt[i][j]!=0){// Если число матрицы отлично от 0
mtxAtt[i][j]=1;
}}}
return mtxAtt;
}}



второй :
Код

public class Un {
public int Multiplication(int[][] matrix1, int[][] matrix2) {
int vCount=0;
int[][] matrixn;
int[][] matrix = new int[vCount][vCount];// Создаем новую матрицу
for (int i = 0; i<matrix1.length; i++){// Цикл по количеству строк 1 матрицы
for (int j = 0; j<matrix2.length; j++){// Цикл по количеству столбцов 2 матрицы
for (int k = 0; k<matrix2.length; k++){// Цикл по количеству строк 2 матрицы
matrix[i][j]+= matrix1[i][k] * matrix2[k][j];// Получение [i,j] элемента итоговой матрицы
}
return matrix[i][j];
}}}}


вот тут и вылетает ошибка :"missing return statement"
голову сломала уже что и как,ничего путного не нашла.
PM MAIL   Вверх
GZep
Дата 8.4.2012, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: нет
Всего: 32



Зато теперь хотя бы видно:
Код

int[] matrix;

Код

matrix[i][j] = 1;

Массив matrix декларирован как одномерный, а обращаетесь к нему как к двумерному.

Должно быть вроде такого:
Код

int[][] matrix;
matrix = new int[][];


Добавлено через 3 минуты и 56 секунд
Цитата(Inka94 @  8.4.2012,  23:24 Найти цитируемый пост)
Насчет форматирования текста сори,сил уже больше ни на что нет

на сколько знаю, в современных IDE это делается одной командой.

Цитата(Inka94 @  8.4.2012,  23:24 Найти цитируемый пост)
вот тут и вылетает ошибка :"missing return statement"

да потому что код неотформатированный! был бы отформатированный, увидели бы что в конце неправильно расставлены скобки и return не "внутри" метода. Вот компилятор и ругается, что return выражение найти не может.

Добавлено через 5 минут и 14 секунд
Подсказка: после return должно быть 2 закрывающиеся фигурные скобки.


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
Inka94
Дата 8.4.2012, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 4.3.2012

Репутация: нет
Всего: нет



Оо спасибо )) ща гляну ))

Добавлено через 14 минут и 25 секунд
типа так что ли?
Код

public class Un {
public int Multiplication(int[][] matrix1, int[][] matrix2) {
int vCount=0;
int[][] matrix = new int[vCount][vCount];// Создаем новую матрицу
for (int i = 0; i<matrix1.length; i++){// Цикл по количеству строк 1 матрицы
for (int j = 0; j<matrix2.length; j++){// Цикл по количеству столбцов 2 матрицы
for (int k = 0; k<matrix2.length; k++){// Цикл по количеству строк 2 матрицы
matrix[i][j]+= matrix1[i][k] * matrix2[k][j];// Получение [i,j] элемента итоговой матрицы
}}}
return matrix[i][j];}}


Это сообщение отредактировал(а) Inka94 - 8.4.2012, 23:34
PM MAIL   Вверх
Mirkes
Дата 10.4.2012, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 7
Всего: 17



Цитата(Inka94 @  8.4.2012,  15:17 Найти цитируемый пост)
1.Определяем, связан ли граф (Если нет — циклов нет);

Извините за наивный вопрос, но почему связность графа влечет его ацикличность?


--------------------
Mirkes
PM MAIL   Вверх
Inka94
Дата 15.4.2012, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 4.3.2012

Репутация: нет
Всего: нет



Цитата(Mirkes @ 10.4.2012,  18:21)
Цитата(Inka94 @  8.4.2012,  15:17 Найти цитируемый пост)
1.Определяем, связан ли граф (Если нет — циклов нет);

Извините за наивный вопрос, но почему связность графа влечет его ацикличность?

А что вас смущает?

PM MAIL   Вверх
Mirkes
Дата 15.4.2012, 16:38 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 7
Всего: 17



Насколько я помню, наличие циклов и связность графов понятия не связанные. Если взять два циклических графа и объединить, то будем иметь циклический несвязный граф. Например. Если вершины 1, 2 и 3 связаны каждый с каждым, то мы имеем цикл. Если вершины 4, 5  и 6 связаны каждый с каждым, то имеем еще один цикл. Граф со всеми шестью вершинами несвязный, но имеет два цикла. Именно это я и имел в виду.
Стало интересно, полез в искать определения. Вообще говоря фундаментальный цикл определяется для произвольного ОСТОВА графа, а не для ОСТОВНОГО ДЕРЕВА. Так что утверждение в пункте 1 - не верно. Если граф не связен, я посовтовал бы разбить его на вязные компоненты и искать фундаментальные циклы в каждой компоненте отдельно. Это намного быстрее. А вот утверждать ацикличность на основании несвязности - грубая ошибка.

Это сообщение отредактировал(а) Mirkes - 15.4.2012, 17:00


--------------------
Mirkes
PM MAIL   Вверх
Inka94
Дата 7.5.2012, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 4.3.2012

Репутация: нет
Всего: нет



Цитата(Mirkes @ 15.4.2012,  16:38)
Насколько я помню, наличие циклов и связность графов понятия не связанные. Если взять два циклических графа и объединить, то будем иметь циклический несвязный граф. Например. Если вершины 1, 2 и 3 связаны каждый с каждым, то мы имеем цикл. Если вершины 4, 5  и 6 связаны каждый с каждым, то имеем еще один цикл. Граф со всеми шестью вершинами несвязный, но имеет два цикла. Именно это я и имел в виду.
Стало интересно, полез в искать определения. Вообще говоря фундаментальный цикл определяется для произвольного ОСТОВА графа, а не для ОСТОВНОГО ДЕРЕВА. Так что утверждение в пункте 1 - не верно. Если граф не связен, я посовтовал бы разбить его на вязные компоненты и искать фундаментальные циклы в каждой компоненте отдельно. Это намного быстрее. А вот утверждать ацикличность на основании несвязности - грубая ошибка.

Ого,я как-то об этом абсолютно не задумывалась...Спасибо большое,что сказали. Это немного меняет алгоритм и вообще почти всю программу на задачу...Даже стыдно,что не обратила внимание.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1305 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.