| author | klao | 
| Mon, 04 Oct 2004 16:00:14 +0000 | |
| changeset 935 | 73de5b1f2abc | 
| parent 3 | 272a5677bd6d | 
| permissions | -rw-r--r-- | 
| alpar@1 | 1  | 
#include <iostream>  | 
| alpar@1 | 2  | 
#include <graph.h>  | 
| alpar@2 | 3  | 
#include <bfs.h>  | 
| alpar@1 | 4  | 
|
| alpar@1 | 5  | 
using namespace NEGRO;  | 
| alpar@1 | 6  | 
using namespace std;  | 
| alpar@1 | 7  | 
|
| alpar@1 | 8  | 
class NodeData;  | 
| alpar@1 | 9  | 
class EdgeData;  | 
| alpar@1 | 10  | 
|
| alpar@1 | 11  | 
typedef Graph<NodeData,EdgeData> TestGraph;  | 
| alpar@1 | 12  | 
|
| alpar@1 | 13  | 
class NodeData  | 
| alpar@1 | 14  | 
{
 | 
| alpar@1 | 15  | 
public:  | 
| alpar@1 | 16  | 
int id;  | 
| alpar@1 | 17  | 
bool isVis;  | 
| alpar@2 | 18  | 
bfs_node_data<TestGraph> bfs;  | 
| alpar@1 | 19  | 
};  | 
| alpar@1 | 20  | 
|
| alpar@1 | 21  | 
class EdgeData  | 
| alpar@1 | 22  | 
{
 | 
| alpar@1 | 23  | 
public:  | 
| alpar@1 | 24  | 
int id;  | 
| alpar@1 | 25  | 
};  | 
| alpar@1 | 26  | 
|
| alpar@2 | 27  | 
typedef Graph<NodeData,EdgeData> TestGraph;  | 
| alpar@1 | 28  | 
|
| alpar@3 | 29  | 
int main()  | 
| alpar@1 | 30  | 
{
 | 
| alpar@1 | 31  | 
TestGraph G;  | 
| alpar@3 | 32  | 
TestGraph::NodeIterator n,m;  | 
| alpar@3 | 33  | 
TestGraph::OutEdgeIterator e;  | 
| alpar@3 | 34  | 
int i;  | 
| alpar@1 | 35  | 
|
| alpar@1 | 36  | 
|
| alpar@1 | 37  | 
//for(i=1;i<=10;i++) G.AddNode().n=i; //Ez nagyon rossz!!!!!!!!  | 
| alpar@1 | 38  | 
for(i=1;i<=10;i++) G.AddNode()->id=i; //Ez a jo!!!!!!!!  | 
| alpar@1 | 39  | 
|
| alpar@1 | 40  | 
//n=G.AddNode();  | 
| alpar@1 | 41  | 
|
| alpar@1 | 42  | 
//for(i=1;i<=10;i++) cout << (G.AddNode()->n=i) << ' ';  | 
| alpar@1 | 43  | 
//cout << '\n';  | 
| alpar@1 | 44  | 
|
| alpar@1 | 45  | 
i=0;  | 
| alpar@35 | 46  | 
for(G.GetFirst(n);n.Valid();n++)  | 
| alpar@35 | 47  | 
for(G.GetFirst(m);m.Valid();++m)  | 
| alpar@1 | 48  | 
if(n!=m) G.AddEdge(n,m)->id=++i;  | 
| alpar@1 | 49  | 
|
| alpar@1 | 50  | 
cout << "Number of edges: " << i << "\n\n";  | 
| alpar@1 | 51  | 
|
| alpar@1 | 52  | 
TestGraph::AllEdgeIterator a;  | 
| alpar@35 | 53  | 
for(G.GetFirst(a);a.Valid();++a)  | 
| alpar@1 | 54  | 
cout << a->id << ":" << a.From()->id << "->" << a.To()->id << " ";  | 
| alpar@1 | 55  | 
|
| alpar@1 | 56  | 
cout << "\n\n\n";  | 
| alpar@1 | 57  | 
|
| alpar@35 | 58  | 
for(G.GetFirst(n);n.Valid();++n)  | 
| alpar@1 | 59  | 
    {
 | 
| alpar@1 | 60  | 
cout << n->id << "->";  | 
| alpar@35 | 61  | 
for(G.GetFirst(e,n);e.Valid();++e)  | 
| alpar@1 | 62  | 
cout << e->id << ":" << e.To()->id << ' ';  | 
| alpar@1 | 63  | 
cout << '\n';  | 
| alpar@1 | 64  | 
}  | 
| alpar@1 | 65  | 
|
| alpar@1 | 66  | 
cout << "\n\n\n\nB-verzio:\n\n\n";  | 
| alpar@1 | 67  | 
|
| alpar@1 | 68  | 
G.Clean();  | 
| alpar@1 | 69  | 
|
| alpar@1 | 70  | 
for(i=1;i<=10;i++) G.AddNode()->id=i;  | 
| alpar@1 | 71  | 
|
| alpar@1 | 72  | 
i=0;  | 
| alpar@35 | 73  | 
for(n=G.First();n.Valid();n++)  | 
| alpar@35 | 74  | 
for(m=G.First();m.Valid();++m)  | 
| alpar@1 | 75  | 
if(n!=m) G.AddEdge(n,m)->id=++i;  | 
| alpar@1 | 76  | 
|
| alpar@1 | 77  | 
;  | 
| alpar@35 | 78  | 
for(n=G.First();n.Valid();++n) //Demo  | 
| alpar@1 | 79  | 
    {
 | 
| alpar@1 | 80  | 
e=G.First(n);  | 
| alpar@35 | 81  | 
while(e.Valid())  | 
| alpar@3 | 82  | 
if((e->id)%2) G.Delete(e++); //it may be nice to have a postfix ++  | 
| alpar@1 | 83  | 
else ++e;  | 
| alpar@1 | 84  | 
}  | 
| alpar@1 | 85  | 
|
| alpar@2 | 86  | 
// cout << "Number of edges: " << i << "\n\n";  | 
| alpar@2 | 87  | 
|
| alpar@35 | 88  | 
for(a=G.First();a.Valid();++a)  | 
| alpar@1 | 89  | 
cout << a->id << ": " << a.From()->id << "->" << a.To()->id << " ";  | 
| alpar@1 | 90  | 
|
| alpar@1 | 91  | 
cout << "\n\n\n";  | 
| alpar@1 | 92  | 
|
| alpar@35 | 93  | 
for(n=G.First();n.Valid();++n)  | 
| alpar@1 | 94  | 
    {
 | 
| alpar@1 | 95  | 
cout << n->id << "->";  | 
| alpar@35 | 96  | 
for(e=G.First(n);e.Valid();++e)  | 
| alpar@1 | 97  | 
cout << e->id << ":" << e.To()->id << ' ';  | 
| alpar@1 | 98  | 
cout << '\n';  | 
| alpar@1 | 99  | 
}  | 
| alpar@1 | 100  | 
|
| alpar@3 | 101  | 
// For Marci's sake  | 
| alpar@2 | 102  | 
|
| alpar@3 | 103  | 
  {
 | 
| alpar@3 | 104  | 
G.Clean();  | 
| alpar@3 | 105  | 
|
| alpar@3 | 106  | 
for(int i=1;i<=10;i++) G.AddNode()->id=i;  | 
| alpar@3 | 107  | 
|
| alpar@3 | 108  | 
|
| alpar@3 | 109  | 
    {  //I would'n say I'm really happy with this.
 | 
| alpar@35 | 110  | 
int i=0;  | 
| alpar@35 | 111  | 
for(TestGraph::NodeIterator n(G);n.Valid();n++)  | 
| alpar@35 | 112  | 
for(TestGraph::NodeIterator m(G);m.Valid();++m)  | 
| alpar@3 | 113  | 
if(n!=m) G.AddEdge(n,m)->id=++i;  | 
| alpar@3 | 114  | 
}  | 
| alpar@3 | 115  | 
|
| alpar@35 | 116  | 
for(TestGraph::NodeIterator n(G);n.Valid();++n) //Demo  | 
| alpar@3 | 117  | 
      {
 | 
| alpar@3 | 118  | 
TestGraph::OutEdgeIterator e(G,n);  | 
| alpar@35 | 119  | 
while(e.Valid())  | 
| alpar@3 | 120  | 
if((e->id)%2) G.Delete(e++); //it may be nice to have a postfix ++  | 
| alpar@3 | 121  | 
else ++e;  | 
| alpar@3 | 122  | 
}  | 
| alpar@3 | 123  | 
|
| alpar@35 | 124  | 
for(TestGraph::AllEdgeIterator a(G);a.Valid();++a)  | 
| alpar@3 | 125  | 
cout << a->id << ": " << a.From()->id << "->" << a.To()->id << " ";  | 
| alpar@3 | 126  | 
|
| alpar@3 | 127  | 
cout << "\n\n\n";  | 
| alpar@3 | 128  | 
|
| alpar@35 | 129  | 
for(TestGraph::NodeIterator n(G);n.Valid();++n)  | 
| alpar@3 | 130  | 
      {
 | 
| alpar@3 | 131  | 
cout << n->id << "->";  | 
| alpar@35 | 132  | 
for(TestGraph::OutEdgeIterator e(G,n);e.Valid();++e)  | 
| alpar@3 | 133  | 
cout << e->id << ":" << e.To()->id << ' ';  | 
| alpar@3 | 134  | 
cout << '\n';  | 
| alpar@3 | 135  | 
}  | 
| alpar@3 | 136  | 
}  | 
| alpar@1 | 137  | 
}  |