откомментировать программу

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Loka
Сообщения: 1
Зарегистрирован: 23 дек 2010, 04:46

Здравствуйте,откомментируйте программу,пожалуйста
С++ начинаю только изучать,поэтому не все ясно...
мне нужны комменты к каждой строке,пожалуйста,так как надо переписать эту программу на шарп...это реализация алгоритма Косарайю (поиск компонет сильной связности в орграфе)

Код: Выделить всё

#include "stdafx.h"
#include "iostream"
 
using namespace std;
 
// Основные переменные
int Nn;
int S[10];
int F[10];
int FIn[20];
char Color[10];
 
// Структура графа
struct Node
{
        int No;
        Node* Next;
}
*Beg, *Np, *Np1, *Temp, *Temp1, *Temp2;
 
Node *Graph[50];
Node *Grapht[50];
 
// Создаем структуру
Node* Create(int N)
{
        Np = new Node;
        Np->No = N;
        Np->Next = NULL;
        return Np;
}
 
// Вставляем вершины
void Insert(Node* Np)
{
        if (Beg == NULL)
                Beg = Np;
        else
        {
                Temp = Beg;
                Beg = Np;
                Np->Next = Temp;
        }
}
 
// Выводим граф
void Display(Node* Np)
{
        while(Np != NULL)
        {
                cout<<Np->No<<"-";
                Np = Np->Next;
        }
}
 
// Удаляем вершины
void Del(Node* Np, Node* Np1)
{
        Np->Next = Np1->Next;
        delete Np1;
}
 
// Проверяем или мы уже здесь были
void Visit(int J, Node* A[])
{
        Color[J] = 'g';
        Temp = A[J];
        while(Temp != NULL)
        {
                int V = Temp->No;
                if(Color[V] == 'w')
                {
                        Visit(V, A);
                        Temp = A[J]->Next;
                }
                else
                        Temp = Temp->Next;
        }
        cout<<J<<",";
        Color[J] = 'b';
}
 
// Деревья, которые выбираются в результате, представляют собой сильные компоненты
void DFS(int N, Node* A[])
{
        for(int J = 1; J <= N; J++)
                Color[J] = 'w';
        for(int I = 1; I <= N; I++)
        {
                if(Color[I] == 'w')
                        Visit(I, A);
                cout<<"\n";
        }
}
 
// Инвертируем ребра исходного орграфа
void Tran(int N)
{
        for(int I = 1; I <= N; I++)
        {
                Color[I] = 'w';
                Np = Create(I);
                Grapht[I] = Np;
        }
        for(int J = 1; J <= N; J++)
        {
                Temp = Graph[J]->Next;
                while (Temp != NULL)
                {
                        int X = Temp->No;
                        Np = Create(J);
                        Temp1 = Grapht[X];
                        Np->Next = Temp1->Next;
                        Temp1->Next = Np;
                        Temp = Temp->Next;
                }
        }
}
 
// Основная процедура алгоритма
void SCC(int N)
{
        int K;
        DFS(N, Graph);
        for(K = 1; K <= N; K++)
        {
                Color[K] = 'w';
                int T = F[K];
                FIn[T] = K;
        }
        Tran(N);
        for(K = (2 * N); K >= 1; K--)
                if((FIn[K] != NULL) && (Color[FIn[K]]) == 'w')
                {
                        int Z = FIn[K];
                        Visit(Z, Grapht);
                        cout<<"\n";
                }
}
 
// Создаем сам граф
void CreateG(int N)
{
        int I = 1; 
        char Ch = 'y';
        int Sd;
        Nn = 0;
        int X = 0;
        while(I <= N)
        {
                cout<<"Enter Size Of Nodes Adjacent To "<<I<<" : ";
                cin>>Sd;
                while(X < Sd)
                {
                        cout<<"Enter The Adjacent Node Of Node # "<<I<<" : ";
                        cin>>Nn;
                        Create(Nn);
                        Insert(Np);
                        X++;
                }
                Graph[I] = Beg;
                Beg = NULL;
                I++;
                X = 0;
        }
}
 
// Основная программа
int main()
{
        int N;
        cout<<"Enter The Size Of Nodes : ";
        cin>>N;
        CreateG(N);
        cout<<"\nResult :\n";
        SCC(N);
        return 0;
}
Ответить