数据结构课程设计旅游景点咨询系统的设计与实现Word文档下载推荐.docx

上传人:b****1 文档编号:13169075 上传时间:2022-10-07 格式:DOCX 页数:21 大小:84.32KB
下载 相关 举报
数据结构课程设计旅游景点咨询系统的设计与实现Word文档下载推荐.docx_第1页
第1页 / 共21页
数据结构课程设计旅游景点咨询系统的设计与实现Word文档下载推荐.docx_第2页
第2页 / 共21页
数据结构课程设计旅游景点咨询系统的设计与实现Word文档下载推荐.docx_第3页
第3页 / 共21页
数据结构课程设计旅游景点咨询系统的设计与实现Word文档下载推荐.docx_第4页
第4页 / 共21页
数据结构课程设计旅游景点咨询系统的设计与实现Word文档下载推荐.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

数据结构课程设计旅游景点咨询系统的设计与实现Word文档下载推荐.docx

《数据结构课程设计旅游景点咨询系统的设计与实现Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计旅游景点咨询系统的设计与实现Word文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。

数据结构课程设计旅游景点咨询系统的设计与实现Word文档下载推荐.docx

voidSimpleway(MGraph&

m,char*str,char*buf)//求任意两个景点之间的所有简单路径

intMinway(MGraph&

m,char*str,char*buf)//求两顶点间的最短路径

3.各模块之间的调用关系以及算法设计

函数CreateDN调用函数LocateVex

函数Simpleway调用函数LocateVex

函数Minway调用函数LocateVex,GetVex,FirstAdjVex,NextAdjVex

主函数调用函数CreateDN,Simpleway,Minway。

三、详细设计

1.数据类型定义

typedefstruct

{

VRTypeadj;

intinfo;

}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];

VertexTypevexs[MAX_VERTEX_NUM];

AdjMatrixarcs;

intvexnum,arcnum;

}MGraph;

2.系统主要子程序详细设计

a.

voidCreateDN(MGraph*G)

{/*采用数组(邻接矩阵)表示法,构造有向网G*/

inti,j,k,w,c;

chars[MAX_INFO],*info;

VertexTypeva,vb;

printf("

请输入景点个数以及景点间所有路径的个数(以空格隔开)"

);

scanf("

%d%d"

&

(*G).vexnum,&

(*G).arcnum);

请输入%d个景点:

\n"

(*G).vexnum);

for(i=0;

i<

(*G).vexnum;

++i)/*构造顶点向量*/

scanf("

%s"

(*G).vexs[i]);

++i)/*初始化邻接矩阵*/

for(j=0;

j<

++j)

{

(*G).arcs[i][j].adj=INFINITY;

/*网*/

(*G).arcs[i][j].info=NULL;

}

请输入%d条景点间的路径,路径间的路程权值以及路径间到达方式(以0或1来表示到达方式,步行:

0,索道:

1,如:

光明顶迎客松301):

\n"

(*G).arcnum);

for(k=0;

k<

(*G).arcnum;

++k)

{

%s%s%d%d*c"

va,vb,&

w,&

c);

/*%*c吃掉回车符*/

i=LocateVex(*G,va);

j=LocateVex(*G,vb);

(*G).arcs[i][j].adj=(*G).arcs[j][i].adj=w;

/*有向网*/

(*G).arcs[i][j].info=(*G).arcs[j][i].info=c;

/*有向*/

}

}

b.

m,char*str,char*buf)/*求任意两个景点之间的所有简单路径*/

for(inti=0;

m.vexnum;

i++)

{

visited[i]=false;

}

intx=LocateVex(m,str);

inty=LocateVex(m,buf);

/*从x出发到y*/

stack<

int>

s;

s.push(x);

visited[x]=true;

inti=0;

intz=0;

//表示没有找到这两个点之间有路径

while(!

s.empty())

intflag=0;

//取栈顶元素

intt=s.top();

for(;

{

if(m.arcs[t][i].adj!

=INFINITY&

&

visited[i]==false)

{

s.push(i);

flag=1;

visited[i]=true;

/*找到简单路径*/

if(s.top()==y)//到达终点

{

z=1;

//找到这样的路径

cout<

<

"

一条简单路径为:

endl;

{

stack<

s2;

//建立一个临时的栈

//创建一个数组存放路径下标

int*way=newint[s.size()];

intcount=0;

while(!

{

s2.push(s.top());

s.pop();

}

//还原s同时输出路径

s2.empty())

cout<

m.vexs[s2.top()]<

"

;

way[count++]=s2.top();

s.push(s2.top());

s2.pop();

//计算路径长度,给出到达的方式

intnum=0;

到达方式:

for(intk=0;

s.size()-1;

k++)

{

intx1=LocateVex(m,m.vexs[way[k]]);

inty1=LocateVex(m,m.vexs[way[k+1]]);

num+=m.arcs[x1][y1].adj;

if(m.arcs[x1][y1].info==0)

cout<

步行"

"

else

索道"

}

路程:

num<

}

cout<

//出栈

intp=s.top();

visited[p]=false;

s.pop();

//从p开始接着访问后面的邻接点

i=p+1;

break;

}

//跳出本次循环

i=0;

break;

}

}

if(flag==0)

//出栈

intp=s.top();

visited[p]=false;

s.pop();

//从p开始接着访问后面的邻接点

i=p+1;

if(z==0)

cout<

两景点不可达"

c.

//分配路径相关信息的存储空间

int**road=newint*[m.vexnum];

road[i]=newint[m.vexnum];

//初始化

for(intj=0;

j++)

if(j==0)

road[i][j]=x;

else

road[i][j]=-1;

//while(find_s[x]==true)

find_s[i]=false;

length[i]=m.arcs[x][i].adj;

if(m.arcs[x][i].adj!

=INFINITY)

{

road[i][1]=i;

}

find_s[x]=true;

length[x]=0;

rigth_length[x]=0;

for(intj=1;

intpose=find_min_length(m,length);

intz=0;

//记录找到它的路径

while(road[pose][z]!

=-1&

z<

=m.vexnum)

{

z++;

}

//cout<

min_length="

length[pose]<

rigth_length[pose]=length[pose];

//将路径最短的关联的另一个顶点加入已找到路径的数组中

fi

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 中职中专

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1