Witam,
Musze wykonać następujący program:
Napisz program, który odczyta ze standardowego wejścia definicje krawędzi grafu nieskierowanego i na ich podstawie utworzyć macierz i listę sąsiedztwa.
Oba główne zadania wykonałem. Nie mam jednak pomysłu na to jak zmodyfikować kod, aby wpisywać dane krawędzi tylko raz (na początku programu), a później przekazywać to dalej do funkcji i wykonywać dalsze operacje.
Z góry dzięki za pomoc,
#include <iostream>
using namespace std;
const int vectors = 100; // maksymalna ilość wierzchołków w grafie
int i,j,check,n,x,y;
void MacierzSasiedztwa(int n);
void ListaSasiedztwa(int n);
void DaneWejsciowe(int &n);
struct lista
{
int vertex;
lista *next;
};
int main()
{
DaneWejsciowe(n);
MacierzSasiedztwa(n);
ListaSasiedztwa(n);
getchar();
getchar();
return 0;
}
void DaneWejsciowe(int &n)
{
cout << "Podaj ilosc krawedzi: ";
cin >> n; // odczytujemy ilość krawędzi
};
void MacierzSasiedztwa(int n)
{
int Tablica[vectors][vectors]; // macierz sąsiedztwa
for(i = 0; i < vectors; i++)
for(j = 0; j < vectors; j++)
Tablica[i][j] = 0;
check = 0;
for(i = 0; i < n; i++)
{
cin >> x >> y; // odczytujemy krawędź
check = (x > check) ? x : check;
check = (y > check) ? y : check;
Tablica[x-1][y-1] = 1;
Tablica[y-1][x-1] = 1;
}
cout << endl;
for(i = 0; i < check; i++)
{
for(j = 0; j < check; j++) cout << Tablica[i][j] << " ";
cout << endl;
}
}
void ListaSasiedztwa(int n)
{
struct lista *L[vectors],*p;
for(i = 0; i < vectors; i++) L[i] = NULL;
check = 0;
for(i = 0; i < n; i++)
{
cin >> x >> y; // odczytujemy krawędź
check = (x > check) ? x : check;
check = (y > check) ? y : check;
p = new lista;
p->next = L[x-1]; p->vertex = y; L[x-1] = p;
p = new lista;
p->next = L[y-1]; p->vertex = x; L[y-1] = p;
}
cout << endl;
for(i = 0; i < check; i++)
{
cout << i + 1 << ":";
p = L[i];
while(p)
{
cout << p->vertex << " ";
p = p->next;
}
cout << endl;
}
}