首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

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

2012-04-10 
简单图的遍历,结果死循环了,大家帮忙检查一下吧C/C++ code#include iostream #include cstdlibusing n

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

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数组每递归一次就重复定义了一次

热点排行