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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2017, 15:03   #1
MisterMyth1992
 
Регистрация: 19.04.2014
Сообщений: 5
По умолчанию матрица инцидентности (подобрать матрицу и код)

Ребята день добрый. Не знаю правильный ли я выбрал раздел, но напишу сюда.
Задание: используя метод поиска в ширину, найти и вывести путь в ориентированном графе между двумя вершинами. Номера начальной и конечной вершин ввести с клавиатуры. Граф задать в текстовом файле матрицей инциденций.

В методичке дан лишь один пример, лишь под смежность. Работаю с Dev C++, так как он дан в методичке.

Я во первых не могу понять, что нужно поправить в программе под данный тип матрицы. И собственно саму матрицу подобрать.

Спасибо.
Вложения
Тип файла: zip Graph.zip (35.5 Кб, 12 просмотров)
MisterMyth1992 вне форума Ответить с цитированием
Старый 11.05.2017, 15:27   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Цитата:
Я во первых не могу понять, что нужно поправить в программе под данный тип матрицы.
В школе учились? Элементарную логику можете? Шнурки там завязать?.. Тогда к чему этот вопрос?

1. У вас программе СПИСКИ СМЕЖНОСТИ, вам нужна МАТРИЦА. Что нужно подправить?
2. Матрицу не надо подбирать. Это способ задания графа, т.е. его описание. Это условие.
p51x вне форума Ответить с цитированием
Старый 11.05.2017, 15:36   #3
MisterMyth1992
 
Регистрация: 19.04.2014
Сообщений: 5
По умолчанию

Используя метод поиска в ширину, найти и вывести путь в неориентированном графе между двумя заданными вершинами. Номера начальной и конечной вершин ввести с клавиатуры. Граф задать в текстовом файле матрицей смежности.

Цитата другого варианта задания. Получается что код, который дан выше вообще под матрицы не подходит?
MisterMyth1992 вне форума Ответить с цитированием
Старый 11.05.2017, 16:37   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

У вас жесткое требование на матрицу только в файле -> править ввод и превращение этой матрицы в ваши списки. Логично же?
p51x вне форума Ответить с цитированием
Старый 11.05.2017, 16:41   #5
MisterMyth1992
 
Регистрация: 19.04.2014
Сообщений: 5
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
У вас жесткое требование на матрицу только в файле -> править ввод и превращение этой матрицы в ваши списки. Логично же?
Второй человек от которого я слышу о переделке одной матрицу в другую.... Но как это сделать не ясно.
MisterMyth1992 вне форума Ответить с цитированием
Старый 11.05.2017, 21:53   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Ну так откройте хотя бы вики и узнайте, чем эти две матрицы отличаются. Что цифирки обознают в них.
p51x вне форума Ответить с цитированием
Старый 19.05.2017, 09:11   #7
MisterMyth1992
 
Регистрация: 19.04.2014
Сообщений: 5
По умолчанию

Мне сказали, что нужно матрицу инциденций превратить в матрицу смежности, а уже потом с ней работать.

Вот такой вот код я написал.
Код:
 
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <Windows.h>
#include <malloc.h>
#include <locale.h>
#define u 100
typedef struct ListNode_
{
int info;
ListNode_ *next;
} ListNode;
bool flag [u]= {false};
ListNode *BEGIN[u];
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)
{
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,M, N;
SetConsoleTitleW(L"Lab2");
setlocale(LC_ALL, "russian");
FILE *f=fopen("graph.txt","r");
fscanf(f,"%d %d\n", &M, &N);
int **incidenceMatrix = new int*[M];
for (int row = 0; row < M; row++)
{
incidenceMatrix[row] = new int[N];
for (int column = 0; column < N; column++)
fscanf(f, "%d", &incidenceMatrix[row][column]);
}
bool **adjacencyMatrix = new bool*[M];
for (int row = 0; row < M; row++)
{
adjacencyMatrix[row] = new bool[M];
for (int column = 0; column < M; column++)
adjacencyMatrix[row][column] = false;
}
for (int column = 0; column < N; column++)
{
int from = -1, to = -1;
for (int row = 0; row < M && (from == -1 || to == -1); row++)
{
if (incidenceMatrix[row][column] == 1)
from = row;
else if (incidenceMatrix[row][column] == -1)
to = row;
}
adjacencyMatrix[from][to] = true;
}
fclose(f);
int FST;
printf("Укажите вершину с которой начать обход в ширину..\n");
scanf("%d", &FST);
printf("\Обход в ширину\n");
for(i=0;i<u;i++) flag[i]=false;
InitQuene();
BFS(FST-1);
getch();
for(i=0;i<u;i++)
{
ListNode *cuz, *tmp;
cuz=BEGIN[i];
while(cuz!=NULL)
{
tmp=cuz;
cuz=cuz->next;
free(tmp);
}
}
return 0;
}
Как я понял нужно поменять что то в функции

Код:
void BFS(int cur)
{
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;
}
}
}
Думаю на строку
ListNode *List = BEGIN[cur];

Так она в структуре сидит, но на что ее нужно поменять не ясно.
MisterMyth1992 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Матрица инцидентности, граф IIItepSeLb Помощь студентам 1 13.01.2016 12:45
Преобразование матрицы смежности в матрицу инцидентности для неорграфа Adidasss Паскаль, Turbo Pascal, PascalABC.NET 1 14.11.2012 21:39
матрица инцидентности zzaa Общие вопросы C/C++ 0 05.10.2010 20:33
Матрица инцидентности. Rayman Общие вопросы C/C++ 16 17.12.2009 01:38
TurboPascal: граф, матрица смежности и матрица инцидентности. ulala Помощь студентам 0 02.12.2009 10:11