51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1535|回复: 1
打印 上一主题 下一主题

[原创] 新手!可以请各位前辈指点吗???求解

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2010-12-11 19:27:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<iostream.h>
struct ArcNode//定义边表结点
{    int adjvex;//邻接点域
      ArcNode *next;
};
template <class T>
struct VertexNode //定义顶点表结点
{
      T vertex;//
      ArcNode *firstedge;
};
const int MaxSize=10;    //图的最大顶点数
int visited [MaxSize];
template <class T>
class ALGraph
{   
   public:
       ALGraph(T a[ ], int n, int e);  //n是顶点数,e是边数
       ~ALGraph(){}   
       void DFSTraverse(int v);      
       void BFSTraverse(int v);      
  private:
       VertexNode<T> adjlist[MaxSize]; //??????????  
       int vertexNum, arcNum;      
};
template <class T>
ALGraph<T>::ALGraph(T a[ ], int n, int e)
{   
    vertexNum=n; arcNum=e;
        int i,j,k;
    ArcNode  *s;
    ArcNode  *p;
    for (i=0; i<vertexNum; i++)   
    //输入顶点信息,初始化边表
    {
       adjlist[i].vertex=a[i];
       adjlist[i].firstedge=NULL; // 以上两句是什么意思????一个链表还是  vertexNum个链表??  
    }
for (k=0; k<arcNum; k++)   
     //输入边的信息存储在边表中
     {
         cin>>i>>j;   
         s=new ArcNode;
                 s->adjvex=j;
                 s->next=adjlist[i].firstedge;
             adjlist[i].firstedge=s;
                 p=new ArcNode;
         p->adjvex=i;
         p->next=adjlist[i].firstedge;
                 adjlist[i].firstedge=p;
                 }
}
template <class T>
void ALGraph<T>:FSTraverse(int v)
{        
    ArcNode *p;
        int j;
        cout<<adjlist[v].vertex;  visited[v]=1;
    p=adjlist[v].firstedge;   
    while (p!=NULL)
    {
        j=p->adjvex;
        if (visited[j]==0) DFSTraverse(j);
    p=p->next;           
    }
}
template <class T>
void ALGraph<T>::BFSTraverse(int v)
{
   int Q[MaxSize],front,rear,j;
   ArcNode *p;
        front=rear=-1;   //假设采用顺序队列且不会发生溢出
        front=rear=-1;   
   cout<<adjlist[v].vertex;    visited[v]=1;   Q[++rear]=v;   
   while (front!=rear)
   {
       v=Q[++front];    p=adjlist[v].firstedge;   
       while (p!=NULL)
       {
          j= p->adjvex;
          if (visited[j]==0) {
             cout<<adjlist[j].vertex;  visited[j]=1; Q[++rear]=j;
          }
          p=p->next;
       }
           if(visited[v+1]==0) v=v+1;
    }
}
void main()
{
  int a[5]={0,1,2,3,4};
ALGraph<int> graph(a,5,4);

graph.BFSTraverse(0);


}

构造图,遍历图!应用到实际当中有什么用?哪里需要类似图的代码??
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2010-12-20 17:53:48 | 只看该作者
好怀念C语音啊?好久没有看过了?期待别人解决版主的问题
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-9-20 13:46 , Processed in 0.074606 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表