Vektor se chová zvláštně – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Vektor se chová zvláštně – C / C++ – Fórum – Programujte.comVektor se chová zvláštně – C / C++ – Fórum – Programujte.com

 

Vkoncich
~ Anonymní uživatel
3 příspěvky
25. 6. 2007   #1
-
0
-

Mám takový problém a jsem celkem v koncích. Jsem ochotný zaplatit formou například kreditu na mobilní sítě ČR, neboť můj problém celkem hoří (je to úkol v rámci jendoho projektu).

Jedná se o Floyd-Warshallův algoritmus, jehož základ jsem našel v této podobě (posléze jsem se ho pokusil upravit, nicméně stále neúspěšně, takže pošlu základní tvar).



#include <vector>
#include <iostream>
#include <string>

using namespace std;

typedef vector<int> Column;
typedef vector<Column> Matrix;

void path(int start, int dest, Matrix& paths);

int main(int argc, char* argv[])
{
int n; //number of vertices
cout<<"Please enter the number of vertices: "<<endl;
cin>>n;
cout<<endl;

Matrix wMatrix;
Matrix paths;

// get weight matrix
cout<<"please fill the adjacency matrix, use -1 for absent paths:"<<endl;
int temp=0;
for (int i=1; i<=n; i++)
{
Column column, tempcolumn;
for (int j=1; j<=n; j++)
{
cout<<"W["<<i<<"]["<<j<<"]: ";
cin>>temp;
if(temp==-1) temp= 65536;
column.push_back(temp);
tempcolumn.push_back(-1);
}
wMatrix.push_back(column);
paths.push_back(tempcolumn);
}


// floyd algorithm
for (int k=0; k<n; k++)
for (int i=0; i<n; i++)
for (int j=0; j<n; j++)
if (wMatrix[i][k]+wMatrix[k][j] < wMatrix[i][j])
{
paths[i][j] = k;
wMatrix[i][j] = wMatrix[i][k]+wMatrix[k][j];
}

// give shortest path
while(true)
{
int start,dest;
string answer;
cout<<"Please enter the number of start vertex: ";
cin>>start;
cout<<"and destination: ";
cin>>dest;
cout<<endl;
cout<<"Intermediate vertices:";
path(start-1,dest-1,paths);

cout<<endl<<endl<<"Do you want to find another shortest path?(yes or no) ";
cin>>answer;
if( answer != "yes" )
break;
}

return 0;
}

void path(int start, int dest, Matrix& paths)
{
if (paths[start][dest] != -1)
{
path(start, paths[start][dest],paths);
cout<<"->"<<paths[start][dest]+1;
path(paths[start][dest],dest,paths);
}
}


Problém, je zřejmě zde, kde podmínka se vždy rovná -1 (nebo při všech dosavadních zkouškách)



void path(int start, int dest, Matrix& paths)
{
if (paths[start][dest] != -1)
{
path(start, paths[start][dest],paths);
cout<<"->"<<paths[start][dest]+1;
path(paths[start][dest],dest,paths);
}
}


Za případnou pomoc vřele děkuji.

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
637 příspěvků
25. 6. 2007   #2
-
0
-

To Vkoncich:

Nestačilo by toto řešení? Odkaz jsem našel na wikipedii.
http://www.ece.rice.edu/~jpr/research/fwarsh.html
Je to sice anglicky, ale není na tom nic k nepohopení. A jelikož jsem líný zjišťovat, jak pracuje tento algoritmus, tak nevím jestli je správně.

Nahlásit jako SPAM
IP: ...–
Vkoncich
~ Anonymní uživatel
3 příspěvky
25. 6. 2007   #3
-
0
-

S tímto jsem již pracoval a ukázal se být v některých směrech nevyhovující. Každopádně děkuji, ale tohle není to pravé.

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
637 příspěvků
25. 6. 2007   #4
-
0
-
Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
637 příspěvků
25. 6. 2007   #5
-
0
-

Mimochodem obrázek,který se nachází nahoře té stránky(ne toho appletu), je špatně - má prohozeny vrcholy 5 a 4, ostatně to je patrné i matice sousednosti(dosažitelosti), která je pod ním(nebo z toho appletu).

Nahlásit jako SPAM
IP: ...–
Peter D.0
Expert
26. 6. 2007   #6
-
0
-
Nahlásit jako SPAM
IP: ...–
Program nemusi fungovat rychle, staci ze funguje dostatecne rychle.
Vkoncich
~ Anonymní uživatel
3 příspěvky
27. 6. 2007   #7
-
0
-

Ok, no podívám se na to, každopádně děkuji za rady

Nahlásit jako SPAM
IP: ...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 22 hostů

Podobná vlákna

Vektor — založil emdzej

Zvlastne fungujuci IF — založil Smokie

Vektor vektoru v C++ — založil jirkab

Soubor vektor z VC++ 9 — založil yaqwsx

Matice a vektor — založil jean08

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý