![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 02.12.2010
Сообщений: 15
|
![]()
Откомментируйте программу,пожалуйста
построчно #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; } |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
откомментировать программы | Loka | Помощь студентам | 0 | 08.12.2010 05:19 |
Написать программу. | Sania92 | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 24.05.2010 00:17 |
Разработать программу! | BaHeK | Общие вопросы .NET | 3 | 23.03.2010 15:24 |
Написал программу, помогите натянуть Шейдеры или как нибудь модифицировать программу | WMLite | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 16.06.2009 13:57 |