Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > С/С++
Перезагрузить страницу Алгоритм нахождения Эйлерова цикла
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
RomanSpark RomanSpark вне форума
Новичок
 
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 15.06.2012
По умолчанию Алгоритм нахождения Эйлерова цикла - 15.06.2012, 19:17

#include<stdio.h>
#include<conio.h>
#include<math.h>
#define NMAX 20

int prov2(int n,int g[][NMAX])
{
int i,j,t=0,k=0;
for (i=0;i<n;i++)
{for (j=0;j<n;j++) k+=g[i][j];
if (k%2!=0) t++;
if (t>2) return 7;
k=0;
}
return 0;
}

void Poisk(int v, int n,int g[][NMAX], int *no, int res[NMAX])
{
int stack[NMAX]={0},ns=0,V=0,i,j;

stack[ns++]=v;
while (ns!=0)
{
V=0;
v=stack[ns-1];
for (i = 0; i < n; i++) V+=g[v][i];
if (V==0) ns--,res[(*no)++]=v;
else
{
i=0;
while (g[v][i]!=1) i++;
g[v][i]=0;
g[i][v]=0;
stack[ns++]=i;
}
}
}

int VVOD(int *n,int g[][NMAX])
{
int i,j;
FILE *f;
if ((f=fopen("<адрес входного файла>","r"))!=NULL)
{
fscanf(f,"%d",n);
if ((*n<2)||(*n>20)) return 5;
if (feof(f)) return 4;
for (i=0;i<(*n);i++)
for (j=0;j<(*n);j++)
fscanf(f,"%d",&g[i][j]);
}
else return 3;
return 0;
}
int marker(int n, int massiv[], int metka)
{
int result=0;
for (int i = 0; i < n; i++) if (massiv[i]==metka) result++;
return result;
}

int prov1(int n,int g[][NMAX])
{
int v=0;
int *massiv=(int*)malloc(sizeof(int)*n);
for (int i=0; i < n; i++) massiv[i]=1;
massiv[v]=2;
while (marker(n,massiv,2)!=0)
{
for (int i=0; i < n; i++) if (massiv[i]==2){ v=i; break;}
for (int i=0; i < n; i++) printf("%d\n",massiv[i]);
printf("\n");
massiv[v]=3;
for (int j=0; j < n; j++) if ((g[v][j]==1)&&(massiv[j]==1)) massiv[j]=2;
}
for (int i=0; i < n; i++) if (massiv[i]==1) return 6;

return 0;
}

void Vyvod(int pr)
{
switch (pr)
{
case 5: {printf("nedopustimoe kolichestvo vershin");getch();break;}
case 3: {printf("net vhodnogo faila");getch();break;}
case 4: {printf("file pust");getch();break;}
case 6: {printf("net ejlerova puty: graf nesvjazniy");getch();break;}
case 7: {printf("net ejlerova puty: vershin nechetnoy stepeny bolee2");getch();break;}
default:
;
}
}

int main()
{
int i,j,k,n,no=0,g[NMAX][NMAX],t[NMAX][NMAX],res[NMAX];

if (VVOD(&n,g)!=0) {Vyvod(VVOD(&n,g));return 0;}

if (prov1(n,g)==6) {Vyvod(prov1(n,g));return 0;}
if (prov2(n,g)==7) {Vyvod(prov2(n,g));return 0;}
j=0;
while (j<n)
{ no=0;
for (i = 0; i < n; i++) for (k = 0; k < n; k++) t[i][k]=g[i][k];

Poisk(j,n,t,&no,res);
k=0;
for (i = 0; i < no-1; i++)
{
if (g[res[i]][res[i+1]]==1) k++;
}
if (k==no-1) break;
printf ("\nno= %i\n",no);
j++;
}
for (i = no-1; i >=0; i--)
{
printf("%d\n", res[i]);
}
getch();
return 0;

}

//---------------------------------------------------------------------------
Подскажите, пожалуйста, есть ли тут ошибки и, если не трудно, то киньте экзэшник. Заранее благодарю!
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Необходимо составить алгоритм нахождения малого числа gera_2511 Pascal 1 08.06.2011 14:33
Написание эйлерова цикла в графе marina* Вопросы начинающих программистов 1 12.05.2010 21:19
Нахождения простых чисел kdinisv PHP 1 19.10.2009 14:20
Алгоритм нахождения максимального потока Rifler Prolog 1 13.04.2009 18:07
Нахождения ряда Фибоначчи prouser Visual C++ 5 07.05.2008 00:03
Нахождение эйлерова пути на Прологе sonechka Prolog 1 06.12.2007 19:30
Алгоритм Бута ускоренный алгоритм умножения чисел MrPIT Алгоритмы 0 20.05.2006 18:12
проблема нахождения ходов в шахматах ChronicK06 Prolog 2 06.02.2006 02:32
Код программы на Visual Prolog Алгоритм Флойда и Алгоритм Дейкстры r Вопросы начинающих программистов 2 08.12.2005 00:34
Алгоритм нахождения наибольшего общего делителя двух заданных чисел imported_Настасья Вопросы начинающих программистов 3 24.11.2005 20:54
Алгоритм Евклида для нахождения НОД и НОК syn Prolog 3 28.09.2005 18:05
Алгоритм нахождения области Парето Давид Алгоритмы 0 31.03.2004 21:32



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов