Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2010, 17:13   #1
marselo_io_off
 
Регистрация: 24.11.2010
Сообщений: 3
Сообщение алгоритм ершова

Вот, что-то написал такое, естественно позаимствовал куски кода, работает... НО! получается алгоритм раскраски путем перебора вершин! а мне надо алгоритмом Ершова. если надо будет уяснить, что это за алгоритм, то можно написать, а пока вот.. кто знает, подскажите, как его реализовать

Цитата:
#include <iostream>
#include <conio.h>
using namespace std;

struct graf{
int stepeni;
int color;
int number;
};


void VyvodGrafa(graf arr[22],int n);
int ProverkaCvetov(graf arr[22],int n);
void InicializaciaGrafa(graf arr[22],int n);

int main()
{
int color1[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14, 15,16};
struct graf arr[22];
const int n(9);
int i, j;
int m[n][n]= {0, 1, 1, 1, 0, 0, 0, 1, 0,
1, 0, 0, 1, 1, 0, 0, 0, 1,
1, 0, 0, 1, 0, 1, 0, 0, 0,
1, 1, 1, 0, 1, 1, 1, 1, 1,
0, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 1, 1, 0, 0, 0, 1, 0,
0, 0, 0, 1, 1, 0, 0, 0, 1,
1, 0, 0, 1, 0, 1, 0, 0, 1,
0, 1, 0, 1, 0, 0, 1, 1, 0};
for(i = 0; i < n; i++,cout<<endl)
for(j = 0; j < n; j++)
cout<<m[i][j]<<' ';

int versh=0,z;
InicializaciaGrafa(arr,n);//Цвета по умолчанию

//Находим степени вершин
for(int i=0; i < n; i++,versh++)
{
arr[versh].stepeni=0;
arr[versh].number=i;
for(int j=0; j < n; j++)
if( m[i][j] == 1 )
arr[versh].stepeni++;
}

//Алгоритм присвоения счетов
int x=0,t,st,flag=0,metk=0,s;
for(x=0; ProverkaCvetov(arr,n)!=0 ; x++) //Цикл по цветам
{
if(arr[x].color == 66) arr[x].color = color1[x]; //Присваиваем первый цвет
for(i=0; i < n; i++) //Цикл, который красит несмежную вершину
{
t=arr[i].number; //Номер строки матрицы смежности
flag=0;
for(j=0; j < n; j++) //Идем в строку матрицы смежности
{
if((m[t][j] == 1 && t!=j)) //Если вершина несмежна с данной вершиной
{
/*Вот здесь, вместо этого цикла, нужно создать цикл, который будет запихивать в массив несмежные вершины, а потом окрашивать массив вершин в один цвет, но как его реализовать?? */
for(s=0; s < n; s++)
m[t][j]+=m[t][j];
if(j == arr[s].number && arr[s].color != color1[x] )
{
flag++;
}
}
if( arr[j].number == t ) metk=j;
if(flag==arr[metk].stepeni && arr[metk].color == 66 )
arr[metk].color = color1[x];
}
}
cout<<endl;
}
VyvodGrafa(arr,n);
getch();
return 0;
}


//инициализируем все цвета в структуре
void InicializaciaGrafa(graf arr[22],int n)
{
for(int s=0;s < n; s++)
{
arr[s].color=66;
}
}


//вывод результатов
void VyvodGrafa(graf arr[22],int n)
{
for(int s=0;s < n; s++)
{
cout<<arr[s].number<<"-"<<arr[s].stepeni<<"-"<<arr[s].color<<endl;
}
}

//возвращает 0, если все цвета уже присвоены
int ProverkaCvetov(graf arr[22],int n)
{
int flag2=0;
for(int xx=0; xx < n; xx++) //проверяем, все ли цвета присвоены
{
if(arr[xx].color <= 16)
++flag2;
}
if(flag2==n) return 0;
else return 1;
}
marselo_io_off вне форума Ответить с цитированием
Старый 25.11.2010, 09:07   #2
marselo_io_off
 
Регистрация: 24.11.2010
Сообщений: 3
По умолчанию

народ, помогитееее
marselo_io_off вне форума Ответить с цитированием
Старый 25.11.2010, 16:09   #3
marselo_io_off
 
Регистрация: 24.11.2010
Сообщений: 3
По умолчанию

уф, никого нет?
marselo_io_off вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
алгоритм Алёна БД в Delphi 14 11.06.2010 12:08
Волновой алгоритм (алгоритм Ли) MrRockchip Общие вопросы C/C++ 4 10.05.2010 13:26
Алгоритм VladimirAleks Помощь студентам 2 29.10.2009 13:11
Алгоритм G@sh!sh Общие вопросы по Java, Java SE, Kotlin 4 21.06.2009 16:17
Алгоритм Rifler Паскаль, Turbo Pascal, PascalABC.NET 3 30.03.2008 01:33