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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2009, 23:25   #1
КсенияСергеевна
 
Аватар для КсенияСергеевна
 
Регистрация: 09.11.2009
Сообщений: 5
Восклицание обход графа в ширину!

Здравствуйте!!
вот задание: "Задано прямоугольное клеточное поле и число k. Построить k различных непрерывных разрезов этого поля на два клеточных поля равной площади. "
мне препод примерно сказал как делать(обход графа в ширину,но соответственно не полного графа,а относительно моей задачи)
я написала код,по примеру, не особо разобралась!
помогите пожалуйста исправить ошибки!
и там не правильно rand написан,исправьте,пожалуйста!!
Код:
# include "stdafx.h"
# include <stdio.h> 
# include <alloc.h> 
# define SI sizeof (int)                       //элемент структуры смежности графа 
 
 
struct VER { int kol; int mv; int *adj; };     //число вершин
int n, h; 
struct VER *Vt;  
File *p, *f;  
 
 
 
 
 void vvod_graf ( ) 
 { 
 int i, j, N, kol; 
 p = fopen( "spisok_Adj.in", "r" );            
 if (fscanf (p, "%d", &n ) != EOF)             
 {
         h=n/2;
         Vt = (struct VER *) calloc (n, SI);       //выделение памяти основным элементам
         for ( i = 0; i < n; i++)                  //ввод метки вершины графа
         {  
                 fscanf (p, "%d", &Vt [i] . mv ); 
                 fscanf (p, "%d", &Vt [i] . kol ); 
                 kol = Vt [i].kol;                      
                 Vt [i] . adj = (int*) calloc (kol, SI); //выделение памяти списку смежности
 
                 if (kol)
                 { 
                         for ( j = 0; j < kol; j++ )
                         { 
                                 fscanf (p, "%d", &N ); Vt [i]. adj [j] = N – 1; 
                         } 
                 } 
         } 
 } 
 fclose ( p ); 
 } 
 
 
 
 
  void Proverka ( int u ) 
  { 
          int i, v, flag = 1,l=0;
          Mark [u] = 2; 
          
          while (flag)
          {  
                  for (i = 0; i < Vt [u ] . kol; i++)
                  {  
                          v = Vt [u ] . adj[i]; 
                          
                          if (Mark [v] = = 1)
                          {
                                  Mark [v] = 2;
                                  l++;
                          }
                          else if (! Mark [v] ) 
                                  Mark [v] = 1;
                  }  
                  
                  for (i = 0; i < n && Mark [i] != 1; i++) ; 
                  
                  if (i == n)
                          flag = 0; 
                  else
                  {
                          u = i; 
                          Mark [u] = 2;
                  }
                  
                  if (l>=h) 
                          flag = 0;
          } 
  }
 
 
 
void main ( void )
{ 
        int i, j, s, k, flag; 
        
        vvod_graf ( );
        Mark = (int*) calloc ( n, SI );         //выделение памяти под массив меток
        
        for ( i = 0; i < n; i++) 
                Mark [i] = 0;  
        
        printf ("\n Задайте K"); 
        scanf ( "%d", &k );
        
        for(j=0;j<=k;j++)
        { 
                s=rand(1,k);
                s --; 
                
                proverka ( s );                     // вывод результатов 
                
                f = fopen( "spisok.out", "w" ); 
                printf (f, "%d ", s+1 ); 
                printf (f, "\n" ); 
                
                for ( i = 0; i < n; i++ ) 
                { 
                        if (i != s && ! Mark [i] ) 
                                printf (f, "%d ", Vt [ i ] . mv); 
                } 
 
                printf (f, "\n"); 
                fclose ( f ); 
        }
}
КсенияСергеевна вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обход бинарного дерева в ширину. Delphi 7. ZhooZhik Помощь студентам 4 01.12.2011 02:48
обход графа в ширину anemy Помощь студентам 0 20.11.2009 01:02
Обход графа в ширину. ZhooZhik Помощь студентам 1 06.04.2009 08:35
Обход графа в глубину coptor Общие вопросы Delphi 0 09.12.2008 22:50