主题:课程设计.大家多多指教
caiqiongyi
[专家分:0] 发布于 2007-06-27 09:17:00
[color=000080]图的操作[/color]
1.建立图(有向或者无向图,任选一种类型)
2.求度(求图中某个接点的度数,有向图还要分别求出度和入度)
3.深度优先遍历图
4.广度优先遍历图
5.推出
回复列表 (共2个回复)
沙发
coolingxyz [专家分:60] 发布于 2007-06-29 14:45:00
浙江省自学考试办公室数据结构辅导网站全部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 .如果有问题可以联系我.同时我这里把这些课件整理出来供大家一次性下载.谢谢大家支持.(不含论文).
板凳
yuanhongqian123 [专家分:90] 发布于 2007-06-30 16:18:00
#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);
}
还有几个功能没有实现,你自己在书上找,直接加上去就行了
我来回复