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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2015, 00:00   #11
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Просто изначально не додумал этот вариант до такого способа (с 1 проходом)
Честно говоря, не хотелось бы делать сортировку, а ограничиться при решении только операциями добавления элемента в список и определения длины списка (лень накрыла ).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 25.05.2015, 09:23   #12
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Интересно.. Реализовать список не лень, а сортануть уже проблема..

А вообще я за такое решение :
Создаем битовый массив. (Насколько помню, это есть и в паскале и в сях)
И переменную для каждой вершины

Дальше берем пару (i,j), смотрим есть ли она в массиве. Если есть - ничего, если нет - засовываем, увеличиваем переменную на 1.

Вот и все

Последний раз редактировалось Poma][a; 25.05.2015 в 10:08.
Poma][a вне форума Ответить с цитированием
Старый 26.05.2015, 01:20   #13
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Так ТС прошел только списки, поэтому от них и отталкиваюсь)
Решение с битовым массивом и переменными, пожалуй, будет лучше по памяти (да и по времени, скорее всего). Но если есть требование на применение списков, то приходится чем-то жертвовать.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 26.05.2015, 01:58   #14
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Примерно так
Код:
#include <stdio.h>
#include <windows.h>

#define N 5

struct o
{
int a;
int b;
struct o* next;

o() { next = 0; }
o(int i1, int i2) { a = i1; b = i2; next = 0; }
void add_next(int i1, int i2) { if(next) next->add_next(i1, i2); else next = new o(i1, i2);}
void print() { printf("%d %d\n", a, b); if (next) next->print(); }

};


void main() 
{
struct o list;
struct o *p, *p1;
int cnt1, cnt2;

list.a = 1; list.b = 2;
list.add_next(1, 3);
list.add_next(1, 4);
list.add_next(1, 5);
list.add_next(1, 6);
list.add_next(2, 7);
list.add_next(2, 4);
list.add_next(2, 5);
list.add_next(3, 8);
list.add_next(3, 6);

list.print();

p = &list;


while (p != 0)
{
 p1 = p->next;
 cnt1 = 0;
 cnt2 = 0;
 while(p1 != 0)
 {
  if ( (p->a == p1->a) || (p->a == p1->b) ) cnt1++;
  if ( (p->b == p1->a) || (p->b == p1->b) ) cnt2++;
  p1 = p1->next;
 }
 if (cnt1 > 3) printf("%d\n", p->a);
 if (cnt2 > 3) printf("%d\n", p->b);
 p = p->next;
}
}
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 27.05.2015, 23:29   #15
Neostat
Пользователь
 
Регистрация: 19.10.2014
Сообщений: 49
По умолчанию

И снова я тут. В общем появилась у меня одна проблема в ходе решении задачи.
Я пошел по первому варианту.Проблема у меня возникла вот в чем...
Я получил список пар городов между которыми есть прямая дорога.Например:
(a,b)
(g,d)
(a,b)
(a,b)
(r,s)
И все бы было хорошо,кроме того что мне нужно удалить лишние одинаковые звенья. То есть ,чтобы после обработки получился такой список:
(a,b)
(g,d)
(r,s)
Но сколько вот сижу не получается.Получилось написать,чтобы он удалял в том случае,если они идут подряд, допустим : (a,b)(a,b) ~ (a,b).
Попробовал поправить цикл,но ничего не вышло,просто вылетает программа.Не могу понять в чем ошибка.Помогите пожалуйста исправить её.
Вот код,пожалуй,всей программы(цикл проверки в главной части программы):
Neostat вне форума Ответить с цитированием
Старый 27.05.2015, 23:29   #16
Neostat
Пользователь
 
Регистрация: 19.10.2014
Сообщений: 49
По умолчанию

PHP код:
program Project2;

{
$APPTYPE CONSOLE}

uses
  SysUtils
,
  
windows;

type
   Tpnt 
=^TElem;
   
TElem record
              Stadt_1
:string;
              
Stadt_2:string;
              
next:Tpnt;
   
end;

   
Tptr =^TNode;
   
TNode record
         Stadt_1
:string;
         
next:Tptr;
   
end;

   var 
start,last,q,p,r:Tpnt;
       
i:integer;
       
phead2:Tptr;
       
stadt_1:string;

    
procedure DelNode(var t:Tptr);
    var 
z:Tptr;
    
begin
        z
:=t;
        
t:=z^.next;
        
Dispose(z);
    
end;

   function 
YesNo():Boolean;
   var 
check:charok:Boolean;
   
begin
       writeln
('?');
       
Readln(check);

       
ok:=true;
       while 
ok do
       
begin
         
if not(check  in ['Y','y','Í','í','N','n','ò','Ò'])then
           begin
            Writeln
(' (y/n):');
            
Readln(check);
            
end
         
else
            
ok:=False;

       
end;

       if(
check in ['Y','y','Í','í']) then
          YesNo
:=True
       
else
         
YesNo:=false;
   
end;

   
procedure Einrichtung(var i,j:string);
   var  
WordLength:Integer;
        
ok:Booleanst:string;
   
begin
         readln
(st);
         
ok:=True;

         while 
ok do
         
begin
           
if((st[1] <> '(') or (st[Length(st)]<>')') or(Pos(',',st)=0)) then
             begin
               writeln
('');
               
Readln(st);
             
end
           
else
            
ok:=False;

         
end;

          
Delete(st,1,1);
          
WordLength:=1;
          while(
WordLength<Pos(',',st))do
            
inc(WordLength);

          
i:=Copy(st,0,WordLength-1);

          
Delete(st,1,WordLength);

          
WordLength:=1;
          while(
WordLength<Pos(')',st))do
           
Inc(WordLength);

          
j:=Copy(st,1,WordLength-1);
   
end;

   function 
GleichStadten(i,j:string;var t:Tpnt):Boolean;
   var 
q:Tpnt; var ok:boolean;
   
begin

      ok 
:= false;
      if 
q<>nil then
      
while t<> nil do
      
begin
        
if((q^.Stadt_1 i) and (q^.Stadt_2 j)) or ((q^.Stadt_1 j) and (q^.Stadt_2 i)) then
           GleichStadten 
:= True;

           
q:=q^.next;
      
end;


   
end;

   
procedure addNode(var start,last:Tpnt);
   var 
j,i:string;
       
ok:boolean;
   
begin
       writeln
('');
       
ok:=True;
       
start := nil;
       
last := nil;
       while 
ok do
       
begin
            Einrichtung
(i,j);


            if 
start nil then
             begin
                
New(start);
                
last:= start;
                New(
last^.next);
                
last^.Stadt_1 := i;
                
last^.Stadt_2 := j;
                
last := last^.next;
                
last^.next:=nil;
             
end
            
else
             
begin
               
New(last^.next);
               
last^.Stadt_1 := i;
               
last^.Stadt_2 := j;
               
last := last^.next;
               
last^.next := nil;
             
end;

            
ok:=YesNo;
        
end;


   
end;

   
procedure DeleteNode(var start:Tpnt);
   var 
q,p:Tpnt;
   
begin
     q
:=start;
     
p:=start;
     while 
q^.next <> nil do
     
begin
        
while q^.stadt_1 q^.next.Stadt_1 do
          
begin
            p 
:=q^.next;
            
q^.next := q^.next.next;
            
Dispose(p);
          
end;
          
q:=q^.next;
     
end;

   
end;

   
procedure PrintNode(var t:Tptr);
   var 
q:Tptr;
   
begin
      q
:=t;
      while(
t<>nil)do
      
begin
          Writeln
(t^.Stadt_1);
          
t:=t^.next;
      
end;
   
end;

   
procedure Print(t:Tpnt);
   var 
q:Tpnt;
   
begin
      q
:=t;

      while(
t<>nil)do
      
begin
          Writeln
(t^.Stadt_1,' ',t^.Stadt_2);
          
t:=t^.next;
      
end;
   
end;

begin{main}
   
SetConsoleCP(1251);
   
SetConsoleOutputCP(1251);

   
addNode(start,last);
   
writeln;
   Print(
start);

 
//Вот тут ошибка(
//P.s. Я для теста цикла,делал проверку только по первому городу,поэтому не обращайте внимание,что не делал проверку второго города
   
q:=start;
   
p:=start;
     while 
q^.next <> nil do
     
begin
       stadt_1 
:= q^.Stadt_1;
       
r:=start;
        while 
r^.next <> nil do
          
begin
            
if stadt_1 r^.next.Stadt_1 then
              begin
                p 
:=r^.next;
                
r^.next := r^.next.next;
                
Dispose(p);
              
end;
              
r:=r^.next;
          
end;
          
q:=q^.next;
     
end;

   Print(
start);
   
readln;

end

Последний раз редактировалось Neostat; 27.05.2015 в 23:35.
Neostat вне форума Ответить с цитированием
Старый 28.05.2015, 01:18   #17
Neostat
Пользователь
 
Регистрация: 19.10.2014
Сообщений: 49
По умолчанию

В общем,кажется я нашел альтернативное решение данной проблемы.Буду проверять на входе,есть ли уже такой элемент или нет.
Neostat вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача по предмету алгоритмы и структуры данных 3Doleg Паскаль, Turbo Pascal, PascalABC.NET 2 01.10.2013 12:21
Задача Pascal на динамические структуры данных Citromon Помощь студентам 10 16.04.2012 09:08
задача по теме Динамические структуры данных в Паскале Klik_1602 Помощь студентам 0 04.01.2011 00:58
задача по динамич. программированию Morsha Помощь студентам 4 02.12.2010 22:55
Проблема при создании списков(динамич. структуры) через отдельную функцию(вне main) Aerial Общие вопросы C/C++ 1 22.09.2010 22:39