简单图的遍历,结果死循环了,大家帮忙检查一下吧,该如何解决
简单图的遍历,结果死循环了,大家帮忙检查一下吧
------解决方案--------------------
深搜里面的visited数组每递归一次就重复定义了一次
- C/C++ code
#include <iostream> #include <cstdlib> using namespace std; const int MAXSIZE=100; const int MAX=32766; template <class T> class MGraph { public: MGraph(T a[],int n,int e); void DFS(int v); void BFS(int v); void Prim(); void Kruskal(); void Dijkstra(int v); void Floyd(); private: T vertex[MAXSIZE]; int arc[MAXSIZE][MAXSIZE]; int vexnum,arcnum; }; template <class T> MGraph<T>::MGraph(T a[],int n,int e) //构造函数 { vexnum=n; arcnum=e; for(int i=0;i<n;i++) vertex[i]=a[i]; for(int i=0;i<n;i++) for(int j=0;j<n;j++) arc[i][j]=0; int x,y,weight; for(int k=0;k<e;k++) { cout<<"input the arc i and arc j:\n"; cin>>x>>y; cout<<"input the weight of the arc:\n"; cin>>weight; arc[x][y]=weight; arc[y][x]=arc[x][y]; } } template <class T> void MGraph<T>::DFS(int v) //深度遍历 { bool visited[MAXSIZE]={0}; visited[v]=1; cout<<vertex[v]<<" "; for(int i=0;i<vexnum;i++) { if(visited[i]==0&&arc[v][i]!=0) DFS(i); } } template <class T> void MGraph<T>::BFS(int v) //广度遍历 { bool visited[MAXSIZE]={0}; int queue[MAXSIZE]; int r=0,f=0; cout<<vertex[v]<<" "; queue[++r]=v; visited[v]=1; while(f!=r) { v=queue[++f]; for(int i=0;i<vexnum;i++) { if(visited[i]==0&&arc[v][i]!=0) { cout<<vertex[i]<<" "; queue[++r]=i; visited[i]=1; } } } } int main() { int str[5]={1,2,3,4,5}; MGraph<int> G(str,5,5); //创建对象并初始化 G.DFS(1); //深度遍历 cout<<endl; G.BFS(1); //广度遍历 cout<<endl; system("pause"); return 0; }
------解决方案--------------------
深搜里面的visited数组每递归一次就重复定义了一次