简单图的遍历,结果死循环了,大家帮忙检查一下吧,该如何解决

简单图的遍历,结果死循环了,大家帮忙检查一下吧
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数组每递归一次就重复定义了一次