potrzebuje pomocy w przerobieniu algorytm DFS tak by wyszukiwał ścieżkę w grafie zapisanym jako macierz sąsiedztwa, jak na razie wyszukuje jedynie drogę między 2 wierzchołkami, prosze o wskazówki co muszę poprawić
#include <iostream>
#include <fstream>
#include <stack>
#include <list>
using namespace std;
int liczenie();
int V = liczenie();
int ** mac_sas = new int *[ V ];
void tworzy_MS( int ** mac_sas, int V );
int liczba_kraw = 0;
void odczyt_MS( int ** mac_sas );
void zawartosc_macierzy_sasiedztwa( int ** mac_sas, int V );
void DFS( int ** mac_sas, int wierzcholek );
bool * odwiedzony;
void DFS_szukaj( int ** mac_sas, int wierzcholek, int szukany );
bool * odwiedzony_szuk;
int main()
{
// -----------------------------------macierz sasiedztwa------
odwiedzony = new bool[ V ];
odwiedzony_szuk = new bool[ V ];
tworzy_MS( mac_sas, V );
odczyt_MS( mac_sas );
// zawartosc_macierzy_sasiedztwa(mac_sas, V);
DFS( mac_sas, 1 );
// DFS(mac_sas,0);
int A, B;
cin >> A;
cin >> B;
A = A - 1;
B = B - 1;
DFS_szukaj( mac_sas, A, B );
//------------------------------------------------------------------------------------------
return 0;
}
int liczenie()
{
int V = 0;
ifstream liczenie;
liczenie.open( "graph.txt" );
char znak;
while( liczenie >> znak )
{
if( znak == ':' )
{
++V;
cout << "dziala" << endl;
}
}
//cout<<V<<endl;
liczenie.close();
return V;
}
void DFS( int ** mac_sas, int wierzcholek )
{
odwiedzony[ wierzcholek ] = true;
// cout<<wierzcholek<<endl;
for( int i = 0; i < V; i++ )
{
if( mac_sas[ wierzcholek ][ i ] == 1 && !odwiedzony[ i ] )
DFS( mac_sas, i );
}
}
void DFS_szukaj( int ** mac_sas, int wierzcholek, int szukany )
{
odwiedzony_szuk[ wierzcholek ] = true;
for( int i = 0; i < V; i++ )
{
if( mac_sas[ wierzcholek ][ szukany ] == 1 )
cout << "jest sciezka" << endl;
else cout << "nie ma" << endl;
}
}
void tworzy_MS( int ** mac_sas, int V )
{
for( int i = 0; i < V; i++ )
{
mac_sas[ i ] = new int[ V ];
}
for( int i = 0; i < V; i++ )
{
odwiedzony[ V ] = false;
odwiedzony_szuk[ V ] = false;
for( int j = 0; j < V; j++ )
{
mac_sas[ i ][ j ] = 0;
}
}
}
void odczyt_MS( int ** mac_sas )
{
fstream plik;
plik.open( "graph.txt" );
int Ve, E;
char dwukropek;
if( plik.is_open() )
{
while( plik.good() )
{
plik >> Ve;
plik >> dwukropek;
while(( plik.get() != '\n' ) && !plik.eof() )
{
plik >> E;
mac_sas[ Ve - 1 ][ E - 1 ] = 1;
liczba_kraw++;
}
}
}
else if( plik.eof() ) std::cout << "Koniec pliku";
else if( plik.fail() ) std::cout << "Blad wczytania pliku";
plik.close();
}
void zawartosc_macierzy_sasiedztwa( int ** mac_sas, int V )
{
cout << "MACIERZ SASIEDZTWA" << endl;
for( int i = 0; i < V; i++ )
{
for( int j = 0; j < V; j++ )
{
std::cout << mac_sas[ i ][ j ];
}
std::cout << std::endl;
}
}