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

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

Восстановить пароль Регистрация
 
ferodot
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 5
24.05.2014, 19:58     Вывести станции в порядке их закрытия #1
В городе есть метро, состоящее из 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

Помогите исправить, пожалуйста, а то я в этом не сильно разбираюсь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2014, 19:58     Вывести станции в порядке их закрытия
Посмотрите здесь:

Вывести в порядке C++
Вывести строку в обратном порядке. C++
C++ Вывести в обратном порядке
Классы (по введенному названию станции вывести из ф-ции мгц) C++
C++ Вывести 4 числа в порядке возрастания
C++ Вывести массив в обратном порядке
C++ Вывести массив в обратном порядке
Вывести сообщения в определенном порядке C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4284 / 3715 / 1249
Регистрация: 14.04.2014
Сообщений: 14,528
24.05.2014, 22:27     Вывести станции в порядке их закрытия #2
В пространстве std уже есть имя rank, замени на другое.
ferodot
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 5
25.05.2014, 12:31  [ТС]     Вывести станции в порядке их закрытия #3
Спасибо большое за помощь, помогло. Оказывается все просто.
Yandex
Объявления
25.05.2014, 12:31     Вывести станции в порядке их закрытия
Ответ Создать тему
Опции темы

Текущее время: 18:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru