#include <iostream> #include <queue> using namespace std; //因为只是为了练习DFS和BFS 数据结构定义的很随意 没有优化类啦 能用就行 class Graph { private: static const int MAX=100; int weight[MAX][MAX];//任意一个图最大节点数为MA int nodes; int vertexs; bool *isVisited; public: void init(int n,int v);//init相当于构造函数的功能 ~Graph() { delete []isVisited; } void SearchBfs(int node); void SearchDfs(int node); void visit (int n) { cout<<"->"<<n; } }; void Graph::init (int n,int v)//先后以节点数和边数为形参 { vertexs=v;//节点数和边数初始化 nodes=n; for(int i=0;i!=n;i++) for(int j=0;j!=n;j++) { weight[i][j]=0; } int i=0,j=0,weight_=0; for(int h=0;h!=v;h++) { cout<<" vertex origin to vertex destition and weight "<<endl; cin>>i>>j>>weight_; weight[i][j]=weight_; } isVisited=new bool[nodes];//记录节点是否被遍历 for(int w=0;w!=nodes;) isVisited[w++]=false; } void Graph::SearchDfs(int node) { visit(node); isVisited[node]=true; for(int i=0;i!=nodes;i++) { if(weight[node][i]!=0&&isVisited[i]==false) SearchDfs(i); } } void Graph::SearchBfs(int node) { queue<int>myQueue; myQueue.push(node); visit(node); isVisited[node]=true; while(!myQueue.empty()) { int v=myQueue.front(); myQueue.pop(); for(int i=0;i!=nodes;i++) { if(weight[v][i]!=0&&isVisited[i]==false) { visit(i); isVisited[i]=true; myQueue.push(i); } } } } int main() { Graph myGraph; myGraph.init(9,8); //myGraph.SearchBfs(0); myGraph.SearchDfs(0); }
原文地址:http://blog.csdn.net/hero_zouzongling/article/details/45577207