ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1000. A+B Problem

No subject
Послано Ahmet Faruk Ozkan OTTOMAN(OSMANLI)) 27 авг 2012 14:14
# include <stdio.h>
# include <conio.h>
# include <math.h>
# include <stdlib.h>
# include <time.h>
# include <limits.h>

int count  = 0;
int A[100][100] , M , N , gidildi[100] = {0};

grafoku()
{
      int i , j , k;

      scanf("%i %i",&N,&M);

      for( i = 0 ; i < N ; ++i )
           for( k = 0 ; k < N ; ++k )
                A[i][k] = 0;

      for( k = 0 ; k < M ; ++k ){
           scanf("%d %d",&i , &j);
           A[i - 1][j - 1] = 1;
           A[j - 1][i - 1] = 1;
      }

      return 0;
}

DFS( unsigned int dugum )
{
     int gidildi[100] = {0};
     unsigned i;

     gidildi[dugum] = 1;
     for( i = 0 ; i < N ; ++i )
          if( A[dugum][i] != 0 && gidildi[i] == 0 )
              DFS(i);
}

int kontrol(int dugum , int i)
{
    A[dugum][i] = 0;
    A[i][dugum] = 0;
    DFS(i);
    for( i = 0 ; i < N ; ++i )
         gidildi[i] = 0;
    if( count == N ){
        count = 0;
        return 1;
    }
    count = 0;
    return 0;
}

main()
{
     int i , j = 1 , toplam = 0 , tek = 0 , euler_yolu[100] = {0} , dugum , sinir;

     grafoku();

     /*Euler yolu var mı?*/

     for( i = 0 ; i < N ; ++i ){
          for( j = 0 ; j < N ; ++j )
               toplam += A[i][j];
          if( toplam % 2 == 1 )  tek++;
          toplam = 0;
     }

     if( !( tek == 2 || tek == 0 ) )
         return;

       /*Euler yolu var mı?(bitti)*/

      dugum = 0;

      for( i = 0 ; i < N ; ++i )
            if( A[dugum][i] == 1 )
                      if( kontrol(dugum , i) ){
                          euler_yolu[j] = i;
                          dugum = i;
                          j++;
                          i = 0;
                      }
                      else{
                          A[dugum][i] = 1;
                          A[i][dugum] = 1;
                      }

      /*yazdırılıyor.*/

      for( i = 0 ; i <= M ; ++i )
           printf("%i ",euler_yolu[i]);

      system("pause");
}