DFS and BFS

来源:互联网 发布:大数据分析系统源代码 编辑:程序博客网 时间:2024/05/17 09:12
#include<iostream>#include<fstream>#include<queue>using namespace std;class Graph{     private:      int **eage;      int n;      int e;  int *visted;  queue<int> intq;  public:  Graph(int n,int e);  ~Graph();  void readGraphFile();  void displayDraph();  void dfsSearch(int v);  void dfs();  void bfsSearch(int v);  void bfs();};Graph::Graph(int ni,int ei){  n=ni;  e=ei;  eage=new int *[n];  for(int i=0;i<n;i++)  eage[i]=new int[n];  visted=new int[n];}Graph::~Graph(){    for(int i=0;i<n;i++)delete eage[i];delete[] eage;delete visted;}void Graph::readGraphFile(){      ifstream ifs; char buf; int p=0; int q=0;     ifs.open("graph.txt"); while(!ifs.eof()) {       ifs.get(buf);       if(buf=='1'||buf=='0')   {       eage[p][q%n]=buf-'0';      q++;      if(q%n==0)         p++;   } }}void Graph::displayDraph(){    for(int i=0;i<n;i++){for(int j=0;j<n;j++)  cout<<eage[i][j]<<" ";cout<<endl;}}void Graph::dfsSearch(int v){ visted[v]=1;     for(int i=0;i<n;i++) if(eage[v][i]==1) {                  cout<<v<<"--->"<<i<<endl;   if(visted[i]!=1)dfsSearch(i);     }}void Graph::dfs(){           for(int i=0;i<n;i++)   if(visted[i]!=1)   dfsSearch(i);         }void Graph::bfsSearch(int v){         intq.push(v);   visted[v]=1;   while(!intq.empty())       {       int  w=intq.front();intq.pop();             for(int i=0;i<n;i++) if(eage[w][i]==1) {                cout<<w<<"--->"<<i<<endl;        if(visted[i]!=1){                              visted[i]=1;                               intq.push(i);} }     }}void Graph::bfs(){     for(int i=0;i<n;i++) if(visted[i]!=1) bfsSearch(i);}int main(){    Graph *g=new Graph(4,16);    g->readGraphFile();g->displayDraph();    char choose;while(cin>>choose){switch(choose){  case  'd': g->dfs(); break;  case  'b':  g->bfs();break;  default:;}}    return 0;}