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

Вывод простых циклов, из каждой вершины графа - C++

Восстановить пароль Регистрация
 
dre
1 / 1 / 0
Регистрация: 01.12.2010
Сообщений: 19
21.12.2010, 01:12     Вывод простых циклов, из каждой вершины графа #1
здравствуйте, помогите переделать код выводящий все простые цепи из каждой вершины графа, в код выводящий все простые циклы из каждой вершины
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
#include <iostream>
#include <conio.h>
#include <stdlib.h>
 
const int n=5;
int mas_res[n];
bool mas_kontr[n];
 
void print(int i_res)
{
        for(int i=0; i<i_res-1; i++)
                cout<<mas_res[i]<<"-";
        cout<<mas_res[i_res-1]<<"\n";
}
 
void rec(int a, int i_res, int *ar3, int n, bool fl)
{
        if(fl)
                fl=false;
        else
                print(i_res);
        int i;
        for(i=0; i<n; i++)
        {
                if(ar3[a*n+i]==1 && !mas_kontr[i])
                {
                        mas_kontr[i]=true;
                        mas_res[i_res]=i;
                        rec(i, i_res+1, ar3, n, fl);
                        mas_kontr[i]=false;
                }
        }
}
 
int main()
{
        int*ar3; int i;
ar3 =new int [n*n];
ar3[0*n+0]=0; ar3[0*n+1]=1; ar3[0*n+2]=0; ar3[0*n+3]=0; ar3[0*n+4]=1;
ar3[1*n+0]=1; ar3[1*n+1]=0; ar3[1*n+2]=1; ar3[1*n+3]=1; ar3[1*n+4]=1;
ar3[2*n+0]=0; ar3[2*n+1]=1; ar3[2*n+2]=0; ar3[2*n+3]=1; ar3[2*n+4]=0;
ar3[3*n+0]=0; ar3[3*n+1]=1; ar3[3*n+2]=1; ar3[3*n+3]=0; ar3[3*n+4]=0;
ar3[4*n+0]=1; ar3[4*n+1]=1; ar3[4*n+2]=0; ar3[4*n+3]=0; ar3[4*n+4]=0;
for(i=0; i<n; i++)
{ cout<<"for "<<i<<" vertex:\n";
        mas_res[0]=i; mas_kontr[i]=true;
        rec(i, 1, ar3, n, true);
        mas_kontr[i]=false;
 
}
   getch();
   }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
21.12.2010, 09:00     Вывод простых циклов, из каждой вершины графа #2
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
#include <iostream>
#include <conio.h>
#include <stdlib.h>
const int n=5;
int mas_res[n];
bool mas_kontr[n];
 
void print(int i_res)
{
        for(int i=0; i<i_res; i++)
                cout<<mas_res[i]<<"-";
        cout<<mas_res[0]<<"\n";
}
 
void rec(int a, int i_res, int *ar3, int n, bool fl)
{
        if(fl)
                fl=false;
        else
        {
            if(ar3[a*n+mas_res[0]]==1 && i_res!=2)
                print(i_res);
        }
        int i;
        for(i=0; i<n; i++)
        {
                if(ar3[a*n+i]==1 && !mas_kontr[i])
                {
                        mas_kontr[i]=true;
                        mas_res[i_res]=i;
                        rec(i, i_res+1, ar3, n, fl);
                        mas_kontr[i]=false;
                }
        }
}
 
int main()
{
        int*ar3; int i;
ar3 =new int [n*n];
ar3[0*n+0]=0; ar3[0*n+1]=1; ar3[0*n+2]=0; ar3[0*n+3]=0; ar3[0*n+4]=1;
ar3[1*n+0]=1; ar3[1*n+1]=0; ar3[1*n+2]=1; ar3[1*n+3]=1; ar3[1*n+4]=1;
ar3[2*n+0]=0; ar3[2*n+1]=1; ar3[2*n+2]=0; ar3[2*n+3]=1; ar3[2*n+4]=0;
ar3[3*n+0]=0; ar3[3*n+1]=1; ar3[3*n+2]=1; ar3[3*n+3]=0; ar3[3*n+4]=0;
ar3[4*n+0]=1; ar3[4*n+1]=1; ar3[4*n+2]=0; ar3[4*n+3]=0; ar3[4*n+4]=0;
for(i=0; i<n; i++)
{ //cout<<"for "<<i<<" vertex:\n";
        mas_res[0]=i; mas_kontr[i]=true;
        rec(i, 1, ar3, n, true);
        mas_kontr[i]=false;
 
}
   getch();
   }
Но еще раз спрошу: Может не стоит выводить и 0-1-4-0 и 0-4-1-0 ?
dre
1 / 1 / 0
Регистрация: 01.12.2010
Сообщений: 19
21.12.2010, 10:34  [ТС]     Вывод простых циклов, из каждой вершины графа #3
а если не стоит, что надо изменить?
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
21.12.2010, 12:02     Вывод простых циклов, из каждой вершины графа #4
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
#include <iostream>
#include <conio.h>
#include <stdlib.h>
 
const int n=5;
int mas_res[n];
bool mas_kontr[n];
 
void print(int i_res)
{
        for(int i=0; i<i_res; i++)
                cout<<mas_res[i]<<"-";
        cout<<mas_res[0]<<"\n";
}
 
void rec(int a, int i_res, int *ar3, int n, bool fl)
{
        int i;
        if(fl)
                fl=false;
        else
                {
                        if(ar3[a*n+mas_res[0]]==1 && i_res!=2 && mas_res[1]<mas_res[i_res-1])
                        {
                            for(i=1; i<i_res; i++)
                                if(mas_res[i]<mas_res[0])
                                    return;
                            print(i_res);
                        }
                }
        for(i=0; i<n; i++)
        {
                if(ar3[a*n+i]==1 && !mas_kontr[i])
                {
                        mas_kontr[i]=true;
                        mas_res[i_res]=i;
                        rec(i, i_res+1, ar3, n, fl);
                        mas_kontr[i]=false;
                }
        }
}
 
int main()
{
        int*ar3; int i;
ar3 =new int [n*n];
ar3[0*n+0]=0; ar3[0*n+1]=1; ar3[0*n+2]=0; ar3[0*n+3]=0; ar3[0*n+4]=1;
ar3[1*n+0]=1; ar3[1*n+1]=0; ar3[1*n+2]=1; ar3[1*n+3]=1; ar3[1*n+4]=1;
ar3[2*n+0]=0; ar3[2*n+1]=1; ar3[2*n+2]=0; ar3[2*n+3]=1; ar3[2*n+4]=0;
ar3[3*n+0]=0; ar3[3*n+1]=1; ar3[3*n+2]=1; ar3[3*n+3]=0; ar3[3*n+4]=0;
ar3[4*n+0]=1; ar3[4*n+1]=1; ar3[4*n+2]=0; ar3[4*n+3]=0; ar3[4*n+4]=0;
for(i=0; i<n; i++)
{ //cout<<"for "<<i<<" vertex:\n";
        mas_res[0]=i; mas_kontr[i]=true;
        rec(i, 1, ar3, n, true);
        mas_kontr[i]=false;
 
}
   getch();
   }
mascoor
0 / 0 / 0
Регистрация: 03.06.2016
Сообщений: 1
03.06.2016, 12:43     Вывод простых циклов, из каждой вершины графа #5
valeriikozlov, доброго времени суток, а можете объяснить свой код, что куда и зачем
Yandex
Объявления
03.06.2016, 12:43     Вывод простых циклов, из каждой вершины графа
Ответ Создать тему
Опции темы

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