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

上传人:wj 文档编号:1501815 上传时间:2023-04-30 格式: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_第6页
第6页 / 共21页
数据结构课程设计旅游景点咨询系统的设计与实现Word下载.docx_第7页
第7页 / 共21页
数据结构课程设计旅游景点咨询系统的设计与实现Word下载.docx_第8页
第8页 / 共21页
数据结构课程设计旅游景点咨询系统的设计与实现Word下载.docx_第9页
第9页 / 共21页
数据结构课程设计旅游景点咨询系统的设计与实现Word下载.docx_第10页
第10页 / 共21页
数据结构课程设计旅游景点咨询系统的设计与实现Word下载.docx_第11页
第11页 / 共21页
数据结构课程设计旅游景点咨询系统的设计与实现Word下载.docx_第12页
第12页 / 共21页
数据结构课程设计旅游景点咨询系统的设计与实现Word下载.docx_第13页
第13页 / 共21页
数据结构课程设计旅游景点咨询系统的设计与实现Word下载.docx_第14页
第14页 / 共21页
数据结构课程设计旅游景点咨询系统的设计与实现Word下载.docx_第15页
第15页 / 共21页
数据结构课程设计旅游景点咨询系统的设计与实现Word下载.docx_第16页
第16页 / 共21页
数据结构课程设计旅游景点咨询系统的设计与实现Word下载.docx_第17页
第17页 / 共21页
数据结构课程设计旅游景点咨询系统的设计与实现Word下载.docx_第18页
第18页 / 共21页
数据结构课程设计旅游景点咨询系统的设计与实现Word下载.docx_第19页
第19页 / 共21页
数据结构课程设计旅游景点咨询系统的设计与实现Word下载.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

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

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

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

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];

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

find_s[pose]=true;

//更新最短路径

for(inti=0;

{

//i点还没有找到最短路径

if(find_s[i]==false&

m.arcs[pose][i].adj+length[pose]<

length[i])

{

length[i]=m.arcs[pose][i].adj+length[pose];

{

//记录中间节点

intz=0;

//记录找到它的路径

while(road[pose][z]!

=-1)

{

z++;

}

/*移位再插入,用pose更新*/

//

(1)复制

for(intk=0;

z;

{

road[i][k]=road[pose][k];

}

road[i][z]=i;

}

}

}

cout<

if(road[y][1]==-1)

return-1;

else

最短路径为:

intcount=0;

while(road[y][count]!

=-1&

count<

m.vexnum)

m.vexs[road[y][count]]<

count++;

count-1;

intx1=LocateVex(m,m.vexs[road[y][i]]);

inty1=LocateVex(m,m.vexs[road[y][i+1]]);

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

else

returnrigth_length[y];

四、测试与分析

1.建立旅游景点咨询系统,根据提示依次输入景点,路径,以及到达方式。

2.求两个景点间的所有简单路径

在主菜单下选2,并输入任意两个景点名称,可以得到这两个景点间的所有简单路径。

3.求两个顶点间的最短路径

在主菜单下选3,并输任意的两个景点,可以得到这两个景点间的最短路径,输出最短路径并以此输出到达方式。

4.退出系统

退出程序。

五、附录

1.旅游景点咨询系统.h

#include<

iostream>

string>

stack>

usingnamespacestd;

#defineMAX_NAME50/*顶点字符串的最大长度+1*/

#defineMAX_INFO50/*相关信息字符串的最大长度+1*/

typedefintVRType;

typedefcharVertexType[MAX_NAME];

#defineINFINITY10000

#defineMAX_VERTEX_NUM20

intLocateVex(MGraphG,VertexTypeu)

{/*初始条件:

图G存在,u和G中顶点有相同特征*/

/*操作结果:

若G中存在顶点u,则返回该顶点在图中位置;

否则返回-1*/

inti;

G.vexnum;

++i)

if(strcmp(u,G.vexs[i])==0)

returni;

return-1;

VertexType*GetVex(MGraphG,intv)

{/*初始条件:

图G存在,v是G中某个顶点的序号。

操作结果:

返回v的值*/

if(v>

=G.vexnum||v<

0)

exit(0);

return&

G.vexs[v];

}

intFirstAdjVex(MGraphG,VertexTypev)

图G存在,v是G中某个顶点*/

返回v的第一个邻接顶点的序号。

若顶点在G中没有邻接顶点,则返回-1*/

inti,j=0,k;

k=LocateVex(G,v);

/*k为顶点v在图G中的序号*/

j=INFINITY;

if(G.arcs[k][i].adj!

=j)

intNextAdjVex(MGraphG,VertexTypev,VertexTypew)

图G存在,v是G中某个顶点,w是v的邻接顶点*/

返回v的(相对于w的)下一个邻接顶点的序号,*/

/*若w是v的最后一个邻接顶点,则返回-1*/

inti,j=0,k1,k2;

k1=LocateVex(G,v);

/*k1为顶点v在图G中的序号*/

k2=LocateVex(G,w);

/*k2为顶点w在图G中的序号*/

for(i=k2+1;

if(G.arcs[k1][i].adj!

boolvisited[MAX_NAME];

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

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2