Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Вывести станции в порядке их закрытия - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Нахождение обратной матрицы http://www.cyberforum.ru/cpp-beginners/thread1186963.html
Доброго времени суток! Напишите, пожалуйста, кому не сложно, простой, понятный код нахождения обратной матрицы. Буду очень признателен!
C++ Кроссворд. Нужно разобраться пишет ошибку не знаю как исправить #include <conio.h> #include <string> #include <fstream> #include <iostream> #include <vector> #include <algorithm> using namespace std; //буква со... http://www.cyberforum.ru/cpp-beginners/thread1186958.html
C++ Помогите найти проверенный и бесплатный компилятор С++
Народ помогите кто нибудь найти, загрузочный файл проверенный и бесплатный на компилятор С++, много проверил и не один не попался рабочий, для windows 7 x64
C++ Реверсировать каждое слово строки
Вообще никак не получается. Кто может подсказать, как это сделать? Есть вариант решения, но мне не подходит: // 5 задание.cpp: определяет точку входа для консольного приложения. // #include...
C++ Функция AfxMessageBox http://www.cyberforum.ru/cpp-beginners/thread1186945.html
Нужно, чтобы функция AfxMessageBox() выводила члены данные авторского класса с подписями (К примеру, Название: Apple, Цвет: Red). Как это можно реализовать? Нужно для диалога поиска в MFC-приложении...
C++ Переставить прямоугольной матрице строки в обратном порядке через динамический массив Эта же задача, но в обычном виде. Однако не получается сделать ее через динамический массив. Кто-нибудь знает как это сделать? #include "stdafx.h" #include <iostream> #include <conio.h> using... подробнее

Показать сообщение отдельно
ferodot
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 5

Вывести станции в порядке их закрытия - C++

24.05.2014, 19:58. Просмотров 320. Ответов 2
Метки (Все метки)

В городе есть метро, состоящее из N станций и M линий, соединяющих их. Каждая линия обеспечивает проезд между любыми двумя станциями в обе стороны. Между любой парой станций проведено не более одной линии. С каждой станции можно было проехать на каждую (возможно, через промежуточные станции). Назовем это свойство связностью метро. Работу метро решили прекратить. Решено закрывать каждый год по одной станции, но так, чтобы связность метро сохранялась. При закрытии какой-либо станции линии, ведущие от этой станции к другим тоже перестают функционировать. По введенной информации о сети метро разработать какой-либо порядок закрытия станций, при котором метро всегда будет оставаться связным.
Входные данные. Первая строка входного файла будет содержать числа N и M. В следующих М строках находится информация о линиях. Каждая из этих строк содержит через пробел числа Ai и Bi (Ai, Bi) — две станции, которые соединяет i-я линия.
Выходные данные. Выходной файл должен состоять из N строк. Каждая строка должна содержать одно число — номер станции. Вывести станции нужно в порядке их закрытия.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <iostream>
using namespace std;
 
const int MaxN = 1000,
          MaxP = 5000;
 
int i,j,N,P;
int pre[MaxN], rank[MaxN], color[MaxN];
int B[MaxP], E[MaxP];
int R[MaxP], kG[MaxN], G[MaxN][MaxN];
FILE* file;
 
void Input()
{
    file = fopen("input.txt","r");
    fscanf(file,"%d %d", &N, &P);
    for(i = 1; i <= P; i++)
    {
        fscanf(file,"%d %d", &B[i], &E[i]);
        R[i] = 1;
    }
    fclose(file);
}
 
void MakeSet(int x)
{
    rank[x] = 0;
    pre[x] = x;
}
 
int FindSet(int x)
{
    int z;
    if(x != pre[x])
        pre[x] = FindSet(pre[x]);
    z = pre[x];
    return z;
}
 
void Link(int x, int y)
{
    if (rank[x] > rank[y])
        pre[y] = x;
    else
    {
        pre[x] = y;
        if (rank[x] == rank[y])
            rank[y]++;
    }
}
 
void Union(int x, int y)
{
    Link(FindSet(x),FindSet(y));
}
 
void MinTreeKruskal()
{
    for(i = 1; i <= N; i++)
        kG[i] = 0;
    for(i = 1; i <= N; i++)
        MakeSet(i);
    for(i = 1; i <= P; i++)
        if(FindSet(B[i]) != FindSet(E[i]))
        {
            kG[B[i]]++; G[B[i]][kG[B[i]]];
            kG[E[i]]++; G[E[i]][kG[E[i]]];
            Union(B[i],E[i]);
        }
}
 
void DFS(int u)
{
int j;
color[u] = 1;
for(j = 1; j <= kG[u]; j++)
    if(color[G[u][j]] == 0)
        DFS(G[u][j]);
cout << u << endl;
}
 
void main()
{
Input();
MinTreeKruskal();
for(i = 1; i <= N; i++)
    color[i] = 0;
DFS(1);
system("pause");
}
Переделывал с Паскаля, и выдает ошибки:
error C2872: 'rank' : ambiguous symbol

Помогите исправить, пожалуйста, а то я в этом не сильно разбираюсь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru