Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Алгоритм Косарайю, Алгоритм Косарайю 
:(
    Опции темы
Abbath1349
Дата 15.7.2012, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Пытаюсь реализовать алгоритм  Косарайю на С++ вроде все правильно написал, но не работает подскажите где ошибка?
Код

#include <queue>
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
#include <array>
using namespace std;
void print_vector_of_vectors(vector<vector<int>> c);
class SCCs
{
    void dfs(vector<int> graph[],bool used[],vector<int> res,int u)
    {
        used[u]=true;
        for(int v:graph[u])
            if(!used[v])
                dfs(graph,used,res,v);
        res.push_back(u);
    }
    public:
        vector<vector<int>> scc(vector<int> graph[],int size)
        {
            int n=size;
            vector<int> *reverseGraph=new vector<int>[n];
            for(int i=0;i<n;i++)
                for(int j:graph[i])
                    reverseGraph[j].push_back(i);
            bool *used=new bool[n];
            vector<int> order;
            for(int i=0;i<n;i++)
                if(!used[i])
                    dfs(graph,used,order,i);
            reverse(order.begin(),order.end());
            vector<vector<int>> components;
            for(int i=0;i<n;i++) used[i]=false;
            for(int u:order)
                if(!used[u])
                {
                    vector<int> component;
                    dfs(reverseGraph,used,component,u);
                    components.push_back(component);
                }
                return components;
        }

}
;

int main(){

    SCCs sc;
    vector<int> g[3];
    g[2].push_back(0);
    g[2].push_back(1);
    g[0].push_back(1);
    g[1].push_back(0);

    vector<vector<int>> components=sc.scc(g,3);
    print_vector_of_vectors(components);
    system("pause");
}
void print_vector_of_vectors(vector<vector<int>> c)
{
    int len=g.size();
    for(int i=0;i<len;i++)
    {
        for(int j=0;j<g[i].size();j++)
            printf("%d ",g[i][j]);
        printf("\n");
    }

}


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


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

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


 




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


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

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