Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

MisterMyth

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору


Код:
 
 
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <Windows.h>
#include <malloc.h>
#define n 100
#include <locale.h>
/*Структура вершины графа, представленного списком смежно-
сти*/
typedef struct ListNode_
{
int info;
ListNode_ *next;
} ListNode;
bool flag [n]= {false};
ListNode *BEGIN[n];
/*Набор процедур, реализующих обход в ширину BFS*/
struct QueneNode
{
int info;
QueneNode *next;
};
QueneNode *BeginQuene;
QueneNode *EndQuene;
void InitQuene()
{
BeginQuene=NULL;
EndQuene=NULL;
}
void EnQuene(int x)//занесение в очередь
{
QueneNode *p;
p=(QueneNode *) malloc(sizeof(QueneNode));
p->info=x;
p->next=NULL;
if(BeginQuene==NULL)
BeginQuene=p;
else EndQuene->next=p;
EndQuene=p;
}
int DeQuene()
{
int val;
QueneNode *p;
p=(QueneNode *) malloc(sizeof(QueneNode));
p=BeginQuene;
val=BeginQuene->info;
BeginQuene=p->next;
if(BeginQuene==NULL)
EndQuene=NULL;
free(p);
return val;
}
bool IsEmptyQuene()
{
if(EndQuene==NULL)
return true;
else return false;
}
void BFS(int cur, int end)
{
EnQuene(cur);
flag[cur]=true;
while(IsEmptyQuene()!=true)
{
cur=DeQuene();
ListNode *List=BEGIN[cur];
while (List!=NULL)
{
if (flag[List->info]==false)
{
EnQuene (List->info);
flag[List->info]=true;
printf("%d-%d\n", cur+1,List->info+1);
}
List=List->next;
}
}
}
int main()
{
int i,j;
FILE *f = fopen ("graph.txt" , "r");
for(i = 0 ; !feof(f) ; i++)
{
int n1;
fscanf(f,"%d",&n1);/*считываем количество вершин,
смежных с i-й вершиной*/
for(j=0;j<n1;j++)
{
int a;
 
fscanf(f,"%d",&a);/*считываем номер очередной j-й
вершины, смежной с вершиной i */
ListNode *cuz= (ListNode*) malloc(
sizeof(ListNode));
cuz->info=a-1;/*заносим в поле info списка значе-
ние номера j-й смежной вершины на 1 меньше ее реального номера,
так как в массиве вершин нумерация элементов начинается с 0, а не
с 1, как нумеруются вершины графа */
cuz->next=BEGIN[i];
BEGIN[i]=cuz;
}
}
fclose(f);
int FST;
int end;
SetConsoleTitleW(L"Lab2");
setlocale(LC_ALL, "russian");
printf("Введите номер вершины, с которой будет начат обход графа в ширину:\n");
scanf("%d", &FST);
printf("Введите номер вершины, на которой будет закончен обход графа в ширину:\n");
scanf("%d", &end);
/*Подготовка массива flag к использованию для поиска в
ширину*/
printf("\nОбход в ширину BFS\n");
for(i=0;i<n;i++) flag[i]=false;
/*Реализация поиска в ширину*/
InitQuene();
BFS(FST-1, end);
getch();
for(i=0;i<n;i++)
{
ListNode *cuz, *tmp;
cuz=BEGIN[i];
while(cuz!=NULL)
{
tmp=cuz;
cuz=cuz->next;
free(tmp);
}
}
return 0;
}
 

 
Сама матрица:
 
1 0 0 0 0 -1 -1 0
-1 1 0 -1 0 0 0 0
0 0 -1 1 -1 0 0 0
0 -1 1 0 0 0 1 1
0 0 0 0 1 1 0 -1
 
 

Всего записей: 1041 | Зарегистр. 03-01-2015 | Отправлено: 09:44 10-05-2017 | Исправлено: MisterMyth, 09:52 10-05-2017
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru