На главную Самоучитель pascal Форум программистов онлайн Решение задач pascal Задачи pascal Поиск
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Страница 1 из 11
Модератор форума: Helpsoon 
Форум » Все о C++ » Помощь в исправлении ошибок » Как сделать перебор всех значений связанного графа. (Как сделать перебор всех значений связанного графа.)
Как сделать перебор всех значений связанного графа.
Alex95Дата: Четверг, 14 Янв 16, 11:07 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 9
Репутация: 1
Статус: Offline
Принимать ладграф, компоненты какого объединены согласно схеме:

Элементы - несложные индексы с 0 вплоть до 6 включая.
Хочу указать различные дороге, к примеру:
Код:

Код
0, 1
0, 1, 2, 6, 5
0, 1, 2, 6, 5, 4
0, 5, 6, 4
....


У меня грамотно перебирает только лишь основной курс, однако далее вводятся дороге снесвязанных компонентов. Отчего такое совершается? Способен кто именно несомненно поможет пофиксить? Сейчас двух суток трепышу, никак не могу осознать в чём факторподобного действия.

Код:

Код
void goElement( std::vector< std::vector< unsigned short > > &relationsArr, unsigned short goElementId, std::vector< unsigned short > visitedIndexesPathArr ) {

printf( "nВход в компонент: %in", goElementId );

// Обследуем дороге с целью посещения - в случае если есть с целью нынешногокомпонента:
for ( unsigned short i = 0; i < relationsArr[ goElementId ].size(); i++ ) {

printf( "t> Допустимый курс: %i с целью %i элемента", relationsArr[ goElementId ][ i ], goElementId );

bool notVisited = true; // Обследуем - никак не навещали единица я relationsArr[ goElementId ][ i ] (допустимый курс с целью посещения) сейчас в нашем пути
for ( unsigned short i1 = 0; notVisited && ( i1 < visitedIndexesPathArr.size() ); i1++ )
if ( relationsArr[ goElementId ][ i ] == visitedIndexesPathArr[ i1 ] )
notVisited = false;

if ( notVisited ) {

printf( " - никак не посещён! Навещаем...n" );

visitedIndexesPathArr.push_back( relationsArr[ goElementId ][ i ] ); // запоминаем его равно какпосещённый
goElement( relationsArr, relationsArr[ goElementId ][ i ], visitedIndexesPathArr ); // Приезжаем вследующий

} else {

printf( " - посещёнn" );

}

}

printf( "ttВсе посещены, итоговый курс: " );
for ( unsigned short i2 = 0; i2 < visitedIndexesPathArr.size(); i2++ )
printf( "%i, ", visitedIndexesPathArr[ i2 ] );
printf( "n" );

}

int main() {

std::vector< std::vector< unsigned short > > relationsArr { 
{1,5,6},
{0,2,6},
{1,3,6},
{2,4,6},
{3,5,6},
{0,4,6},
{0,1,2,3,4,5}
};

std::vector< unsigned short > visitedIndexesPathArr;
visitedIndexesPathArr.push_back( 0 );
goElement( relationsArr, 0, visitedIndexesPathArr );

}
 
Форум » Все о C++ » Помощь в исправлении ошибок » Как сделать перебор всех значений связанного графа. (Как сделать перебор всех значений связанного графа.)
Страница 1 из 11
Поиск: