Текущее время: Сб ноя 14, 2026 21:04

Часовой пояс: UTC+03:00


Правила форума





Начать новую тему  Ответить на тему  [ 5 сообщений ] 
Автор Сообщение
СообщениеДобавлено: Ср дек 01, 2004 20:52 
Не в сети
Генерал сотового комплекса
Генерал сотового комплекса
Аватара пользователя

Зарегистрирован: Вт июн 15, 2004 20:15
Сообщения: 518
Откуда: South Park
Вообщем очень остро нуждаюсь в вашей помощи.
У меня есть задание
Разработать и реализовать в виде:
структур данных с самоадресацией;


Интерфейс графа, включающий операции: добавления и удаления ребер, добавления и удаления вершин, подсчета числа ребер и вершин, вывода информации о ребрах и вершинах, представление ненаправленного графа в виде матрицы смежности.
!!!!Раскраска в два цвета. ---особенно важно, вообще ничего немогу написать



Просьба оказать помощь в написании програм и в исправлении ошибок программ которые сейчас выложу (это програмы которые я писал решаю эту задачу но осталось много не дописаного и несовсем оптимально написана прога).
заранее благодарен

_________________
завязал...теперь про-дотер


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Ср дек 01, 2004 20:53 
Не в сети
Генерал сотового комплекса
Генерал сотового комплекса
Аватара пользователя

Зарегистрирован: Вт июн 15, 2004 20:15
Сообщения: 518
Откуда: South Park
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
//#include <readline/readline.h>
//#include <readline/history.h>
//****************************************************************************
struct pointEl {
pointEl *next; //указатель на след элемент
pointEl *connectedWith; //указатель на список ребер
int id;//номер вершины
};

void help(void);

pointEl * getPoint(int id1); //возвращает элемент по его индексу
pointEl *firstPoint;

void addPoint(int id1); //добавление вершины с индексом id1
void delPoint(int id1); //удаление вершины

voidaddLink(int id1, int id2); //добавление ребра между вершинами с индексами id1 и id2
voiddelLink(int id1, int id2); //удаление ребра

int countnodes(); //Считает кол-во вершин
void coloring(); //тот самый алгоритм что мне надо написать!!!

voidwriteMatrix(); //вывод матрицы смежности графа
void delAll();


pointEl *getPoint(int id1)
{
pointEl *p = firstPoint;
static pointEl *prev = NULL;
if (id1==NULL) return prev;
prev = NULL;
while(p!=NULL) //перебор вершин, пока не найдется одна с требуемым индексом
{
if (p->id==id1) return p;
prev = p;
p = p->next;
}
return NULL;
}
//****************************************************************************
void addPoint(int id1)
{
pointEl *p = getPoint(id1) //проверка существует ли такая вершина
if (p!=NULL) return;
pointEl *n = new pointEl; //создаем элемент списка
n->next = firstPoint; //инициализируем поля
n->connectedWith = NULL;
n->id = id1;
firstPoint = n; //добавляем элемент в список (он становится первым)
}

//****************************************************************************
void delPoint(int id1)
{
pointEl *p = getPoint(id1); //находим элемент по индексу
pointEl *prev = getPoint(NULL);
if (p==NULL) return;
pointEl *l = p->connectedWith;
pointEl *nxt;
while(l!=NULL) //перебираем все ребра и удаляем каждое ф-цией delLink()
{
nxt = l->next;
delLink(p->id,l->id);
l = nxt;
}
if (prev!=NULL) prev->next = p->next; //удаляем вершину из списка
else firstPoint = p->next;
delete p; //удаляем сам объект вершины
}

//****************************************************************************
void addLink(int id1, int id2)
{
pointEl *l;
pointEl *newLink;
pointEl *p1 = getPoint(id1);
pointEl *p2 = getPoint(id2);

if (p1==NULL) //если отсутствует вершина с индексом id1, создаем ее
{
addPoint(id1);
p1 = getPoint(id1);
}

if (p2==NULL) //если отсутствует вершина с индексом id2, создаем ее
{
addPoint(id2);
p2 = getPoint(id2);
}

newLink = new pointEl; //создание елемента списка, инициализация, добавление к списку ребер первой вершины
newLink->next = p1->connectedWith;
newLink->connectedWith = p2;
newLink->id = p2->id;
p1->connectedWith = newLink;

newLink = new pointEl; //создание елемента списка, инициализация, добавление к списку ребер второй вершины
newLink->next = p2->connectedWith;
newLink->connectedWith = p1;
newLink->id = p1->id;
p2->connectedWith = newLink;
}

//****************************************************************************
void delLink(int id1, int id2)
{
pointEl *l;
pointEl *p1 = getPoint(id1);
pointEl *p2 = getPoint(id2);
pointEl *prev;

if (p1==NULL || p2==NULL) return; //проверка существования вершин

l = p1->connectedWith;
prev = NULL;
while(l!=NULL) //поиск в списке ребер 1й вершины, вторую и удаляем
{
if (l->id==id2)
{
if (prev!=NULL) prev->next = l->next;
else p1->connectedWith = l->next;
delete l;
break;
}
prev = l;
l = l->next;
}

l = p2->connectedWith;
prev = NULL;
while(l!=NULL) //поиск в списке ребер 2й вершины, первую и удаляем
{
if (l->id==id1)
{
if (prev!=NULL) prev->next = l->next;
else p2->connectedWith = l->next;
delete l;
break;
}
prev = l;
l = l->next;
}

}

//****************************************************************************
void writeMatrix()
{
int count = countnodes();
int vert = 0;
pointEl *p = firstPoint;
pointEl *l;

cout <<"\n\n";

int *dat = (int *)malloc(count*count*sizeof(int)); //выделяем память для хранения матрицы
int *ids = (int *)malloc(count*sizeof(int)); //выделяем память для всех индексов вершин
int i, j, k, m, min, tmp, nn;

memset(dat,0,count*count*sizeof(int)); //обнуляем матрицу
memset(ids,0,count*sizeof(int));

p = firstPoint;
for(i=0; i<count; i++, p=p->next) //заносим индексы вершин
{
ids[i] = p->id;
}

for(i=0; i<count; i++) //сортируем индексы
{
nn = i;
min = ids[nn];
for(j=i; j<count; j++)
{
if (min>ids[j])
{
min = ids[j];
nn = j;
}
}
tmp = ids[i];
ids[i] = ids[nn];
ids[nn] = tmp;
}


for(p=firstPoint; p!=NULL; p=p->next) //заполнение матрицы смежности
{
for(m=0,i=0; m<count; m++)
if (ids[m]==p->id) { i=m; break;}

for(l=p->connectedWith; l!=NULL; l=l->next)
for(k=0; k<count; k++)
if (ids[k]==l->id)
{

dat[i*count+k] = 1;
vert++;
break;
}
}


for(i=0; i<count; i++) cout << '\t' << ids[i]; //вывод матрицы
cout<<'\n';

for(i=0; i<count; i++)
{
cout << ids[i] << '\t';
for(j=0; j<count; j++)
{
cout << (dat[i*count+j]) << '\t';
}
cout << '\n';
}
cout<<"points: "<<count<<"\tverticles: "<<(vert/2)<<"\n";
free(dat); //освобождение памяти
free(ids);
}
//****************************************************************************
int countnodes()
{
int count=0;
pointEl *p = firstPoint;
while(p!=NULL)
{
p = p->next;
count++;
}
return count;
}

//***************************************************************************
void coloring()
{
printf("\n\nTut mogla bit' Vasha reklama ili moi algoritm::)");
}
//***************************************************************************
void delAll()
{
int id_;
while((firstPoint)!=NULL) //перебераем все вершины начиная с головы и удаляем их
{
id_ = (firstPoint)->id;
delPoint(id_);
}
}




void main() // это уже не код это уже проверка работоспособности:)
{
clrscr();
addLink(133,22);
addLink(23,511);
addLink(112,333);
addLink(53,22);
addPoint(6);
delPoint(333);
writeMatrix();
coloring();
delAll();
getch();

}

_________________
завязал...теперь про-дотер


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Пт дек 03, 2004 16:19 
Не в сети
Генерал сотового комплекса
Генерал сотового комплекса
Аватара пользователя

Зарегистрирован: Вт июн 15, 2004 20:15
Сообщения: 518
Откуда: South Park
ау народ неужто нема програмеров-альтруистов в этом мире:)
з.ы. форматированый вариант этой проги мона найти по адресу
http://online.com.ua/~wotan/proga.txt

_________________
завязал...теперь про-дотер


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Пт дек 03, 2004 18:02 
Не в сети
Аватара пользователя

Зарегистрирован: Ср дек 01, 2004 0:05
Сообщения: 14
Откуда: Питер (Рамбов)
Понимаешь, просто всем лень заниматься всякой ерундой. Поэтому все занимаются не всякой ерундой :) . Я бы помог, но боюсь я пока болванка в этом деле. Удачи! :wink:


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Пт дек 03, 2004 18:31 
Не в сети
Носитель артефактов
Носитель артефактов
Аватара пользователя

Зарегистрирован: Вт авг 17, 2004 17:27
Сообщения: 418
Откуда: Великий Новгород
-Вот беру я сейчас бутылочку водочки (не скажу какая дабы не было рекламой)
из холодильника
-Сворачиваю пробочку
Наливаю себе в рюмашку, а она холодная льется так мягко и медленно
-Опаньки! чуть не перелил!
-Держу стопку в руке, а она холодная аж пальцы стынут.
-Выпиваю медленно, чтобы ощутить весь вкус под языком
-Задерживаю дыхание..... и глубокий выдох!
-Ах как приятно чуствуется это тепло разливающееся по всему телу
-Чуствуется расслабуха в организме, но во рту все еще остается эта приятная горечь
- Беру кусочек лимона надрываю край,
- Одним движением раскрываю его и сьедаю
- Ой кислятина!!!
- Вот теперь полное блаженство, и я с уверенностью могу тебя спросить nameless:
А че это за буквы непонятные ты тут написал, и ваще о чем тема? :D


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 5 сообщений ] 

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 78 гостей


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

Найти:
Перейти:  
© 2003-2007. DestinySphere GmbH, ООО Геймспейс. All Rights Reserved.
Создано на основе phpBB® Forum Software © phpBB Limited.
Русская поддержка phpBB