ダイクストラ法のサンプルプログラム・メインルーチン
RS_FHeap.h, RS_Dijkstra.h とともに用います。
RS_FHeap_test3.cpp
—
C++ source code,
2 kB (2578 bytes)
ファイルコンテンツ
// -*- C++ -*-
// ダイクストラ法のデモ
#include "RS_FHeap.h"
#include "RS_Dijkstra.h"
#include <cstdlib>
#include <iostream>
#include <sstream>
using std :: cin ;
using std :: ostream ;
using std :: ostringstream ;
const int LARGENUM = 10000 ;
int
main
()
{
ostringstream ss ;
// Dijkstra's Algorithm: Starting from Node i
// Creating nodes
for ( int k = 0 ; k < 15 ; ++ k )
{
for ( int i = 0 ; i < 15 ; ++ i )
{
ss << i ;
RS_Dijkstra < int , string > *
x = new RS_Dijkstra < int , string > ( LARGENUM ) ;
ostringstream sx ;
// Creating nodes
for ( int j = 0 ; j < 15 ; ++ j )
{
sx << j ;
x -> setNode ( sx . str () ) ;
sx . clear () ;
sx . str ( "" ) ;
}
// Creating branches
x -> setBidirectionalBranches ( "0" , "1" , 14 ) ;
x -> setBidirectionalBranches ( "0" , "2" , 9 ) ;
x -> setBidirectionalBranches ( "0" , "3" , 31 ) ;
x -> setBidirectionalBranches ( "1" , "10" , 16 ) ;
x -> setBidirectionalBranches ( "1" , "13" , 20 ) ;
x -> setBidirectionalBranches ( "2" , "3" , 20 ) ;
x -> setBidirectionalBranches ( "2" , "4" , 6 ) ;
x -> setBidirectionalBranches ( "2" , "5" , 18 ) ;
x -> setBidirectionalBranches ( "3" , "11" , 26 ) ;
x -> setBidirectionalBranches ( "3" , "14" , 27 ) ;
x -> setBidirectionalBranches ( "4" , "7" , 29 ) ;
x -> setBidirectionalBranches ( "4" , "8" , 1 ) ;
x -> setBidirectionalBranches ( "5" , "6" , 5 ) ;
x -> setBidirectionalBranches ( "5" , "10" , 2 ) ;
x -> setBidirectionalBranches ( "6" , "7" , 15 ) ;
x -> setBidirectionalBranches ( "6" , "11" , 10 ) ;
x -> setBidirectionalBranches ( "6" , "12" , 3 ) ;
x -> setBidirectionalBranches ( "7" , "8" , 16 ) ;
x -> setBidirectionalBranches ( "7" , "9" , 1 ) ;
x -> setBidirectionalBranches ( "8" , "9" , 30 ) ;
x -> setBidirectionalBranches ( "8" , "10" , 2 ) ;
x -> setBidirectionalBranches ( "9" , "13" , 15 ) ;
x -> setBidirectionalBranches ( "9" , "14" , 3 ) ;
x -> setBidirectionalBranches ( "10" , "11" , 14 ) ;
x -> setBidirectionalBranches ( "11" , "12" , 2 ) ;
x -> setBidirectionalBranches ( "12" , "13" , 7 ) ;
x -> setBidirectionalBranches ( "13" , "14" , 26 ) ;
x -> run ( ss . str () ) ;
ss . clear () ;
ss . str ( "" ) ;
if ( i < 2 ) {
int xxx = 0 ;
cin >> xxx ;
}
delete x ;
}
int xxy = 0 ;
cin >> xxy ;
}
}
