回 帖 发 新 帖 刷新版面

主题:课程设计.大家多多指教

[color=000080]图的操作[/color]
1.建立图(有向或者无向图,任选一种类型)
2.求度(求图中某个接点的度数,有向图还要分别求出度和入度)
3.深度优先遍历图
4.广度优先遍历图
5.推出

回复列表 (共2个回复)

沙发

浙江省自学考试办公室数据结构辅导网站全部flash(完全Action script实现)动画模拟课件

下载地址:[url=http://www.pgz8.cn/Software/Catalog121/920.html]爬格子吧[/url]

http://www.pgz8.cn/Software/Catalog121/920.html

2002年我和同学一起做的[[url=http://student.zjzk.cn/course_ware/data_structure/web/main.htm]浙江省自学考试办公室数据结构网站[/url]]的课件,全部用as实现的数据结构算法的动画模拟.

现在我们做的网站访问量一直比较不错.得到了大家的好评.同时很多大学的老师也在用这些课件教学生,经常有很多大学里计算机系的学生来问我这方面的问题.

我的qq还是 21156410 .如果有问题可以联系我.同时我这里把这些课件整理出来供大家一次性下载.谢谢大家支持.(不含论文).

板凳


#include <iostream.h>
#define m 20
typedef struct node
{
 int adjvex;
 struct node *next;
}edgenode;
typedef struct vnode
{
    char vertex;
    edgenode *firstedge;
}vertexnode;

typedef struct
{
    vertexnode adjlist[m];
    int n,e;
}adjgraph;

int visited[m];
//建立无向图
void createadjgraph(adjgraph *g)
{
 int i,j,k;
 edgenode *s;
 cout<<"请输入顶点数和边数:";
 cin>>g->n>>g->e;
 cout<<"输入"<<g->n<<"个顶点";
 for(i=0;i<g->n;i++)
 {
     cin>>g->adjlist[i].vertex;
     g->adjlist[i].firstedge=NULL;
 }
 cout<<"请输入"<<g->e<<"条边(两点表示一条边)"<<endl;
 for(k=0; k<g->e; k++)
 {
     cin>>i>>j;
     s=new edgenode;
     s->adjvex=j;
     
     s->next=g->adjlist[i].firstedge;
     
         g->adjlist[i].firstedge=s;

     s=new edgenode;
     s->adjvex=i;
    s->next=g->adjlist[j].firstedge;
         g->adjlist[j].firstedge=s;
 }

}


void display(adjgraph *g)
{
 cout<<"邻接表显示为: "<<endl;
 edgenode *s;

 for(int i=0;i<g->n;i++)
 {
     s=g->adjlist[i].firstedge;

 cout<<"["<<g->adjlist[i].vertex<<"]=>";

  while(s!=NULL)
     {
       cout<<s->adjvex<<"->";
        s=s->next;
        if(s==NULL)
            cout<<"^";
     }
    cout<<endl;
 }
}

//深度遍历
void dfs(adjgraph *g,int i)
{
    edgenode *p;
    cout<<g->adjlist[i].vertex<<" ";
     visited[i]=1;
     p=g->adjlist[i].firstedge;
     while(p)
     {
         if(!visited[p->adjvex])
             dfs(g,p->adjvex);
             p=p->next;
     }

}

void dfstraverse(adjgraph *g)
{
    int i;
    for(i=0;i<g->n;i++)
        visited[i]=0;
    for(i=0;i<g->n;i++)
        if(!visited[i])
            dfs(g,i);

}

//广度遍历
int loc(adjgraph *g,char data)
{
int i=0;
while(i<g->n&&g->adjlist[i].vertex!=data)
i++;
if(i==g->n)
return -1;
else
return i;

}

void bfs(adjgraph *g,int i)
{
    int j;
    edgenode *p;
    int queue[20],head,tail;
     head=-1;
     tail=-1;
     cout<<"源点"<<g->adjlist[i].vertex<<" ";
     visited[i]=1;
     queue[++tail]=i;
     while(tail>head)
     {
         j=queue[++head];
         p=g->adjlist[j].firstedge;
         while(p)
         {
             if(visited[p->adjvex]==0)
             {
                 cout<<g->adjlist[p->adjvex].vertex<<" ";
                 queue[++tail]=p->adjvex;
                 visited[p->adjvex]=1;

             }
             p=p->next;
         }
     }
}

int bfstraverse(adjgraph *g,char v)
{
    int i,count=0;
    for(i=0;i<g->n;i++)
    
        visited[i]=0;

        i=loc(g,v);
        if(i!=1)
        {
            count++;
            bfs(g,i);
        }
        for(i=0;i<g->n;i++)
                if(!visited[i])
                {
                    cout<<endl;
                    count++;
                    bfs(g,i);

                }
        
return count;
    
}

void main()
{
   adjgraph *g;
   char v;
   g=new adjgraph;

   createadjgraph(g);
   display(g);
   cout<<"深度遍历显示为:";
   dfstraverse(g);
   cout<<endl;
   cout<<"广度遍历:";
   v=g->adjlist[0].vertex;  //如果从0顶点开始
   bfstraverse(g,v);
      
}

还有几个功能没有实现,你自己在书上找,直接加上去就行了

我来回复

您尚未登录,请登录后再回复。点此登录或注册