Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 01.03.2018
Сообщений: 25
1

Перевод в Си из С++. Графы

17.10.2018, 09:32. Показов 345. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго дня! Помогите перевести в Си код. Хотя он почему-то и на С++ не работает.
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include <iostream>
#include <sstream>
#include <iomanip>
#include <fstream>
#include <vector>
#include <conio.h>
 
using namespace std;
 
//обход в ширину
void bfs(vector<vector<int>> &way,int **m,int v,int r,int bgn,int end)
{
    int *f=new int[v];//проверки ребер от вершины
    for(int i=0; i<v; i++)
            f[i]=-1;//сбросили флаги
    vector<int> q;//очередь
    q.push_back(bgn);//начало
    do
    {
        bgn=q.back();
        for(f[bgn]++; f[bgn]<r; f[bgn]++)//пошли по ребрам
            if(m[bgn][f[bgn]]==1)//начало пути
            {
                int k;
                for(k=0; k<v; k++)//вниз по столбцу, ищем конец
                    if(m[k][f[bgn]]==-1 &&(f[k]<0 || k==end))//нашли
                    {
                        q.push_back(k);//вершину в очередь
                        if(k==end)//конечная точка
                        {
                            way.push_back(q);//сохранили путь
                            q.pop_back();//убрали вершину из очереди
                        }
                        break;
                    }
                if(k<v) break;//нашли ребро
            }
            if(f[bgn]>=r)//проверили все ребра
            {
                    f[bgn]=-1;//сбросили флаг вершины
                    q.pop_back();//убрали вершину из очереди
            }
 
    }while(!q.empty());//пока есть путь,его часть
    delete[] f;
}
 
int main()
{
    string name="f.txt";
    cout<<"File: ";
    getline(cin,name);//имя файла
    ifstream f(name.c_str());//файл
    if(f.is_open())//есть такой файл
    {
        setlocale(LC_ALL,"Rus");
        int v,r;//вершины,ребра
        f>>v>>r;//размер
        f.get();
        cout<<"Граф ориентированный,вершин: "<<v<<",ребра: "<<r<<"\n";
        string s;
        int **m=new int*[v];
        int i=0;
        while(f.peek()>0)//пока файл не кончился
        {
            getline(f,s);//строка
            istringstream ss(s);
            m[i]=new int[r];
            for(int k=0; ss>>s; k++)
            {
                m[i][k]=atoi(s.c_str());
                cout<<setw(4)<<m[i][k];
            }
            cout<<endl;
            i++;
        }
        f.close();//закрыли файл
        cout<<endl;
        for(int i=0; i<v; i++)
            for(int k=0; k<r; k++)
                if(m[i][k]==1)
                for(int j=0; j<v; j++)
                    if(m[j][k]==-1)
                        cout<<i<<"->"<<j<<endl;
        int bgn=1,end=4;
        cout<<"\nНачальная и конечная вершины: ";
        cin>>bgn>>end;
        vector<vector<int>> way;
        bfs(way,m,v,r,bgn,end);
        cout<<endl;
        if(way.size())
            for(int i=0; i<(int)way.size(); i++)
            {
                for(int k=0; k<(int)way[i].size(); k++)
                {
                    if(k) cout<<"->";
                    cout<<way[i][k];
                }
                cout<<endl;
            }
        else cout<<"Путей нет!\n";
 
        for(int i=0; i<v; i++)
            delete[] m[i];
        delete[] m;
    }
    else 
        cout<<"File not found!\n";
    system("pause");
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.10.2018, 09:32
Ответы с готовыми решениями:

Графы и перевод в матрицы
Задаю кол-во вершин,ребер и ввожу сами ребра парами. После чего нужно создать матрицу смежности и...

Графы: перевод матрицы инцидентности в список ребер
в ближайшие несколько дней нужна программа и блок-схема перевода матрицы инцидентности в список...

Графы
Кто подскажет каким лучше пользоваться алгоритмом для поиска кратчайшего пути между двумя вершинами...

Графы
Не могу решить задачу. Помогите с решением!!! В заданном графе необходимо определить существует ли...

0
17.10.2018, 09:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.10.2018, 09:32
Помогаю со студенческими работами здесь

Графы на C#
Как можно нарисовать граф из матрицы смежности, которая сохранена в текстовом файле? Или может для...

Графы на С++
Помогите плиз! Есть задача: Посвящение в студенты.Есть n студентов.НЕ ВСЕ знают друг друга.Но у...

Графы
Помогите пожалуйста очень надо решение Есть неориентований граф ((a b) (a d) (a h) (a g) (b c)...

Графы.
Кто подскажет каким лучше пользоваться алгоритмом для поиска кратчайшего пути между двумя вершинами...

Графы
Здравствуйте! Пытаюсь реализовываю метод поиска максимального потока Форда-Фалкерсона в графе. ...

Графы
1) Построить граф, используя язык Си согласно данной схеме на рис.1. 2) По запросу пользователя...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru