收藏 分销(赏)

迪杰斯特拉-景点导航问题的课程设计.doc

上传人:丰**** 文档编号:4758963 上传时间:2024-10-12 格式:DOC 页数:26 大小:655.91KB
下载 相关 举报
迪杰斯特拉-景点导航问题的课程设计.doc_第1页
第1页 / 共26页
迪杰斯特拉-景点导航问题的课程设计.doc_第2页
第2页 / 共26页
点击查看更多>>
资源描述
课程设计报告 实验名称:数据结构与算法课程设计 题 目: 景点导航问题 院 系: 计算机工程学院 班 级: 软件 学 号: 学生姓名: 指导教师: 设计周数: 1周 成 绩: 日期: 2016 年 7 月 4 日 25 目录 一、 课程设计的目的与要求 2 1. 目的: 2 2. 要求: 2 二、 课程设计题目 2 三、 需求分析 2 四、 概要设计 3 五、 详细设计 4 六、 调试分析 6 1. 界面及其选择功能测试 6 2. 创建景点平面图功能的调试 7 3. 景点相关信息查询功能的调试 7 4. 景点路径信息查询功能的调试 8 七、 使用说明 9 八、 测试结果 10 九、 总结 11 1 已完成的工作 11 2 未完成的工作 11 3 需做的改进 12 附录 12 参考文献 12 景点平面图 12 源程序 13 一、 课程设计的目的与要求 1. 目的: 应用数据结构和算法来设计相应的程序,培养学生问题求解模块的框架设计和详细设计、相关程序实现和调试能力,完成创新能力和实践能力的训练。 2. 要求: 用高级程序设计语言C编码,用VC++开发平台调试。 二、 课程设计题目 景点导航问题:设计某一景点的平面图,至少包括10个以上的场所,每两个场所可以有不同的路径,并且路径长度可能不同,找出从任意场所到达另一场所的最佳路径。 三、 需求分析 本演示程序基于VC++6.0编写,完成景点布局的建立、查询,以及各个景点之间的路径查询。 1) 设计景点的平面图,在该景点选取10个左右的子景点。以图中顶点表示该景点内的各景点,存放子景点名称、代号、简介等信息;以边表示路径,存放路径长度等有关信息。 2) 为来访客人提供图中任意景点相关信息的查询。 3) 为来访客人提供任意景点的问路查询,即查询任意两个景点之间的一条最短路径。 4) 为来访客人提供将所查询到的信息保存到指定文件中去的功能。 5) 测试数据: A. 创建景点平面图的操作中依次输入11(景点个数)、 14(相邻景点边数)、 “枇杷园”(各个景点的名称)、“枇杷园是……”(各个景点的简介)、(1 2)(相邻景点的代号)、13(相邻景点的距离),生成一个景点平面图。 B. 查询景点相关信息操作中,输入1、2、3……屏幕终端分别显示1号景点、2号景点、3号景点……的名称、简介,以及其相邻的景点。 C. 查询景点路径的操作中,输入景点代号,如代号1,屏幕终端显示1号景点与其他所有景点的最短路程及所经过的路径。 四、 概要设计 1) 为了实现上述程序功能,需要定义景点平面图的抽象数据类型: Mgraph{ 数据对象:D1={vex|vex∈vexs[vnum],i=0,1,2,…,n≥0} D2={arc|arc∈IntegerSet,i=0,1,2,…,n≥0} 数据关系:R={(ai,ai+1)=arci| ai,ai+1 ∈D1,arci∈D2 } 基本操作: 函数原型 初始条件 操作结果 Void creatgraph(Mgraph *G,char *name[],char *intro[]) 无初始条件 创建一个景点平面图的邻接矩阵和两个字符数组,存放有景点名称、简介等相关信息 Void dijkstra(Mgraph G,int v,char *name[]); 景点平面图G、景点名称数组name已经存在 查询到任意一景点代号v到其他景点的最短路程和路径 Void dijkstra_file(Mgraph G,int v,char *name[]); 景点平面图G、景点名称数组name已经存在 查询到任意一景点代号v到其他景点的最短路程和路径并保存到指定文件中 Void asked(Mgraph G,int v,char *intro[],char *name[]); 景点平面图G、景点名称数组name、景点简介数组intro已经存在 查询到任意一景点v的名称、简介以及相邻景点 Void asked_file(Mgraph G,int v,char *intro[],char *name[]); 景点平面图G、景点名称数组name、景点简介数组intro已经存在 查询到任意一景点v的名称、简介以及相邻景点并保存到指定文件中 Void menu_one(); 在屏幕终端输入1 实现任意一景点的相关查询; 在屏幕上显示操作菜单 Void menu_two(); 在屏幕终端输入2、景点平面图G、景点名称数组name已经存在 在屏幕上显示操作菜单 实现景点平面图中任意一景点相关信息的查询 } 2) 本程序包含8个函数 ① 主函数main() ② 创建景点平面图函数creatgraph() ③ 显示操作菜单函数一menu_one() ④ 显示操作菜单函数二menu_two() ⑤ 最短路径查询函数dijkstra() ⑥ 最短路径结果储存函数dijkstra_file() ⑦ 景点名称查询函数asked() ⑧ 景点名称结果储存函数asked_file() 各函数间关系如下: 五、 详细设计 为了实现概要设计中定义的所有的数据类型,对每个操作写出C语言算法;对主程序和其他模块也都需要写出C语言算法;画出系统结构图 1) 景点平面图的数据类型 typedef char Velemtype; typedef struct { Velemtype vexs[vnum]; int arcs[vnum][vnum]; int vex,arc; }Mgraph; 2) 景点平面图的基本操作如下 void creatgraph(Mgraph *G,char *name[],char *intro[]); void dijkstra(Mgraph G,int v,char *name[]); void dijkstra_file(Mgraph G,int v,char *name[]); void asked(Mgraph G,int v,char *intro[],char *name[]); void asked_file(Mgraph G,int v,char *intro[],char *name[]); void menu_one(); void menu_two(); void main(); 其说明见前。 其中Menu_two为自行设计的景点平面图,即景点平面图已初始化成功。该景点平面图有11个景点、14条景点间的接边。 该景点平面图设计如下: 六、 调试分析 1. 界面及其选择功能测试 检查界面布局是否合理、正确, 选择不同功能后是否可以正确显示。 ① 主菜单1(Menu_one)的界面如下: ② 主菜单2(menu_two)的界面如下: 2. 创建景点平面图功能的调试 3. 景点相关信息查询功能的调试 ① Menu_one中查询功能的调试 分别为输入数据有误和无误时的情况,并可选择是否将结果储存到文件中: ② Menu_two中查询功能的调试 [1.] 输入正确时: [2.] 输入非法数字时: 4. 景点路径信息查询功能的调试 ① Menu_one中路径查询功能的调试 ② Menu_two中路径查询功能的调试 [1.] 输入非法数字时: [2.] 输入正确时 经检验,该结果与用dijkstra算法所求得的结果一致。 通过以上测试可以基本确景点导航系统是否实现了预定的功能。 七、 使用说明 程序名为 课程设计.exe,运行环境为DOS。程序执行后显示 *******************欢迎使用XXX景点导航系统******************** **********Welecome to Use the Attractions Navigation System*********** ******************** Menu ********************* * * * * Function one: 设计景点 Function two: 查询景点信息 * * Function three 问路查询 Function zero: 退出系统 * * 请选择 [Please choose the function what you want]----------- 在select后输入数字选择实现不同的功能,该主菜单需要先自行设计一景点平面图后才能进行其他操作。 具体操作在第六部分均有图示。 八、 测试结果 1) 在menu_one中的设计(创建)操作: 选择1,输入3 2建立一个三个景点,两条路径的平面图; 输入各个景点的名称和简介; 输入各个路径的终点和始点,以及路径长度。 得到景点平面图G、景点名称数组name以及景点简介数组intro。 2) 查询景点详细信息操作(以menu_two为例): 输入2,得到: 继续输入1,则 若输入2,则返回主菜单。 输入55,提示输入错误,重新输入。 3) 查询景点相关路径操作(以menu_two为例): 输入4,得到 继续输入1,得到 若输入2,则返回主菜单。 输入 -2,提示输入错误,返回主菜单重新输入。 九、 总结 1 已完成的工作 本演示程序运行于DOS环境,基本完成了对景点平面图的设计、对其中各个景点的查找、各个景点之间路径查找的功能,用户端可能输入的各种情况考虑的比较完善,程序界面也做到较为简洁友善。而且程序还支持文件储存功能,可以将查询结果向用户端保存。 2 未完成的工作 该程序在灵活性、通用性方面还有所欠缺。其中设计(创建)景点平面图的过程比较繁琐,需大量输入各种信息,平面图若较为复杂则实用性不高。此外程序部分过程比较繁琐,时间、空间复杂度相对较大,对于大程序大平面图设计来说,会造成很多时间空间的浪费。在存储功能的方面也存在些许不足,不支持文件的追加读入功能,导致每个文件只能读入一次储存结果,若继续存储则会替换原有的存储内容。 3 需做的改进 本设计中只是完成了要求的内容,并没有考虑算法的时间和空间复杂度,然而这些也是图论所介绍过的,在大程序中就显得的非常重要了,但是本例考虑程序小为了实现方便没有予以考虑,特别是在求最短路径的算法中,又增加了以固定字符串格式输出以确保效果,时间复杂度达到了O(n*n*n*n*n*n)的程度,在以后的编程中需要注意。 附录 参考文献 [1.] 蒋长浩,吴建专,顾国华等《图论及其应用》,东南大学出版社,2002年 [2.] 徐俊明《图论及其应用》,中国科学与技术出版社,2000年 [3.] 张璇平,雷永梅等《数据结构》,机械工业出版社,2001年 [4.] 李明哲《图论及其算法》,机械工业出版社,2010年 [5.] 谭浩强《C程序设计(第四版)》,清华大学出版社,2010年 [6.] 郑玲《C语言程序设计》,中国电力出版社,2009年 [7.] 林碧英《新编数据结构及算法教程》,清华大学出版社,2012年 景点平面图 景点简介: 枇杷园:到枇杷园游玩,如同其它风景名胜古迹,春、夏、秋、冬景色各有魅力,只有身临其境才能欣赏到山水如画的美。 夕照廊:斜阳落照,塔起金轮,湖上黄昏暮景中无有堪与之相匹者,坐落在湖上的夕照廊,给你诗一般的感受。 山色亭:山色亭,妙在借景,把园内的山和园外的水通过复廊互相引借,使山、水、建筑构成整体,游于其中,给人以无尽的遐想和舒适。 多累台:多累台内有四季长青的雪松,龙柏,有迎春怒放的碧桃,牡丹,有夏日争艳的月季,石榴,还有八月飘香的桂花和寒冬傲雪的腊梅等,各种花木参差错落,宛若人间仙境。 沉心堂:沉心堂中有诸多字画、古玩,朴实典雅,散发悠远气息,是游客放松身心、修养品性的绝佳之地。 正门:正门位于该景点的北面,与银锄湖、夕照廊和沉心堂相连,门由红木雕刻,朴实而典雅。 银锄湖:银锄湖,波光粼粼,宛若银龙,微风拂过,泛起的淡淡涟漪银光闪闪,湖水清澈见底,湖内有各种鱼虾,是游客清凉避暑的好去处。 沁芳榭:沁芳榭中生长着各种各样的花草,无论春夏秋冬,整个园内都散发着芬芳,花盛开之时,万紫千红之境,使游客无法不驻足流连。 松陵酒家:游客若是观赏劳累,想小憩一会,松陵酒家便是不二选择。这充满古色古香气息的酒家,总是可以让游客放松下来,与朋友饮酒畅谈。 偏门:偏门位于该景点的南面,与正门相呼应,可直达引静桥、松陵酒家。 引静桥:引静桥坐落在该景点南面的一湖上,通体都是由大理石打造的引静桥,远远望去,就像是一位朴实安祥的老者,游客登上桥面,也会感觉内心平静而安。 源程序 #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<string.h> #include<windows.h> #define vnum 20 typedef char Velemtype; typedef struct { Velemtype vexs[vnum]; int arcs[vnum][vnum]; int vex,arc; }Mgraph; void creatgraph(Mgraph *G,char *name[],char *intro[]); void dijkstra(Mgraph G,int v,char *name[]); void dijkstra_file(Mgraph G,int v,char *name[]); void asked(Mgraph G,int v,char *intro[],char *name[]); void asked_file(Mgraph G,int v,char *intro[],char *name[]); void menu_one(); void menu_two(); void main() { int n; scanf("%d",&n); if(n==1) { system("cls"); menu_one(); } else if(n==2) { system("cls"); menu_two(); } else return; } void menu_one() { Mgraph G; char *name[vnum]; char *intro[vnum]; int n,m; int i,j,l; printf("******************** 欢迎使用XXX景点导航系统 ********************\n"); printf("**********Welecome to Use the Attractions Navigation System**********\n"); printf("********************\t\tMenu\t\t*********************\n"); printf("* *\n"); printf("* *\n"); printf("Function one:\t设计景点\tFunction two:查询景点信息\t\n"); printf("* *\n"); printf("Function three:\t问路查询\tFunction zero:\t退出系统\t\n"); printf("* *\n"); printf("请选择 [Please choose the function what you want]-----------\n"); printf("* *\n"); while(n) { printf("Please input a number:\t"); scanf("%d",&n); if(n==1) { printf("请按照以下操作提示进行---------\n"); printf("按任意键继续------\n"); getch(); creatgraph(&G,name,intro); printf("*******您已设计完成~~请继续选择~~********\n"); } if(n==2) { printf("请选择您当前所在的位置代号或您想查询的景点位置代号--------\n"); scanf("%d",&i); if(i>G.vex||!i||!G.vex) { printf("该位置代号输入有误!!!无法查询!!!\n"); printf("请重新选择您要实现的功能:\n"); } else { asked(G,i,intro,name); printf("您可以继续选择~\n"); printf("将结果保存到文件中?\n是-----------------1\n否-----------------2\n"); scanf("%d",&l); if(l==1) asked_file(G,i,intro,name); } } if(n==3) { printf("请选择您所在的位置代号或您想查询的景点位置代号--------\n"); scanf("%d",&j); if(j>G.vex||!j||!G.vex) { printf("该位置代号输入有误!!!无法查询!!!\n"); printf("请重新选择您要实现的功能:\n"); } else { dijkstra(G,j,name); printf("您可以继续选择~\n"); printf("将结果保存到文件中?\n是-----------------1\n否-----------------2\n"); scanf("%d",&m); if(m==1) dijkstra_file(G,j,name); } } if(n>3||n<0) printf("您输入的数字有误!!请重新输入!\n"); } } void menu_two() { int a[14][2]={{1,2},{2,3},{3,4},{4,5},{5,6},{2,5},{2,6},{6,7},{7,8},{7,9},{5,9},{9,10},{10,11},{4,11}}; int b[vnum]={16,59,22,27,46,9,14,18,11,45,31,33,8,16}; char *name[]={"枇杷园","夕照廊","山色亭", "多累台","沉心堂","正门", "银锄湖","沁芳榭","松陵酒家", "偏门","引静桥"}; char *intro[]= { "到枇杷园游玩,如同其它风景名胜古迹,春、夏、秋、冬景色各有魅力,只有身临其境才能欣赏到山水如画的美。", "斜阳落照,塔起金轮,湖上黄昏暮景中无有堪与之相匹者,坐落在湖上的夕照廊,给你诗一般的感受。", "山色亭,妙在借景,把园内的山和园外的水通过复廊互相引借,使山、水、建筑构成整体,游于其中,给人以无尽的遐想和舒适。", "多累台内有四季长青的雪松,龙柏,有迎春怒放的碧桃,牡丹,有夏日争艳的月季,石榴,还有八月飘香的桂花和寒冬傲雪的腊梅等,各种花木参差错落,宛若人间仙境。", "沉心堂中有诸多字画、古玩,朴实典雅,散发悠远气息,是游客放松身心、修养品性的绝佳之地。", "正门位于该景点的北面,与银锄湖、夕照廊和沉心堂相连,门由红木雕刻,朴实而典雅。", "银锄湖,波光粼粼,宛若银龙,微风拂过,泛起的淡淡涟漪银光闪闪,湖水清澈见底,湖内有各种鱼虾,是游客清凉避暑的好去处。", "沁芳榭中生长着各种各样的花草,无论春夏秋冬,整个园内都散发着芬芳,花盛开之时,万紫千红之境,使游客无法不驻足流连。", "游客若是观赏劳累,想小憩一会,松陵酒家便是不二选择。这充满古色古香气息的酒家,总是可以让游客放松下来,与朋友饮酒畅谈。", "偏门位于该景点的南面,与正门相呼应,可直达引静桥、松陵酒家。", "引静桥坐落在该景点南面的一湖上,通体都是由大理石打造的引静桥,远远望去,就像是一位朴实安祥的老者,游客登上桥面,也会感觉内心平静而安逸" }; Mgraph G; int n,j,k,m,l; G.vex=11; G.arc=14; for(int i=1;i<G.vex;i++) G.vexs[i-1]=i; for(i=0;i<G.vex ;i++) for(int j=0;j<G.vex ;j++) { if(i==j) { G.arcs [i][j]=0; G.arcs [j][i]=0; } else G.arcs [i][j]=10000; } for(i=0;i<G.arc ;i++) { j=0; G.arcs[a[i][j]-1][a[i][j+1]-1]=b[i]; G.arcs[a[i][j+1]-1][a[i][j]-1]=b[i]; } printf("******************** 欢迎使用XXX景点导航系统 ********************\n"); printf("**********Welecome to Use the Attractions Navigation System**********\n"); printf("* *\n"); printf("* *\n"); printf("* *尊敬的游客您好~欢迎来到XXX景区,我是景区的导航系统--小航 O(∩_∩)O\n"); printf("* *下面是该景区的主要景点以及代号~~\n"); for(i=1;i<=G.vex;i++) { printf("[ %d ]-%s\t",i,name[i-1]); if(i%3==0) printf("\n"); } printf("\n"); printf("* *\n"); printf("小航有什么可以帮到您的呢?\n"); printf("* *\n"); printf("One:\t我想要看看某个景点的信息~~\n"); printf("Two:\t我想知道这个地方的路怎么走~~\n"); printf("* *\n"); printf("请选择 [Please choose the function what you want]---------\n"); printf("* *\n"); while(n) { printf("Please input a number:\t"); scanf("%d",&n); if(n==1) { printf("请按照以下操作提示进行---------\n"); printf("按任意键继续------\n"); getch(); printf("请选择您所在的位置代号或您想查询的景点位置代号--------\n"); scanf("%d",&j); if(j>G.vex||!j) { printf("您输入的代号可能有误哦~小航无法帮您查询到(;′⌒`)\n"); printf("请重新选择一下您要实现的功能吧~\n"); } else { asked(G,j,intro,name); printf("您可以继续选择~\n"); printf("将结果保存到文件中?\n是-----------------1\n否-----------------2\n"); scanf("%d",&l); if(l=1) asked_file(G,j,intro,name); } } if(n==2) { printf("请选择您所在的位置代号或您想查询的景点位置代号--------\n"); scanf("%d",&k); if(k>G.vex||!k||!G.vex) { printf("您输入的代号可能有误哦~小航无法帮您查询到(;′⌒`)\n"); printf("请重新选择一下您要实现的功能吧~\n"); } else { dijkstra(G,k,name); printf("您可以继续选择~\n"); printf("将结果保存到文件中?\n是-----------------1\n否-----------------2\n"); scanf("%d",&m); if(m==1) dijkstra_file(G,k,name); } } if(n>=3||n<0) { printf("您输入的数字可能有误哦~超过了小航的能力范围呢(;′⌒`)\n"); printf("请重新输入~\n"); } } } void creatgraph(Mgraph *G,char *name[],char *intro[]) { int n,j; printf("请输入总景点数和可直达的两景点数目:\t"); scanf("%d%d",&G->vex,&G->arc); for(int i=1;i<=G->vex;i++) G->vexs[i-1]=i; for(i=1;i<=G->vex;i++) { printf("请输入 %d 编号的景点的名称:\t",i); name[i-1]=(char *)malloc(sizeof(char)*10); scanf("%s",name[i-1]); printf("请输入该景点的简介:\n"); intro[i-1]=(char *)malloc(sizeof(char)*100); scanf("%s",intro[i-1]); } for(i=0;i<G->vex;i++) for(int j=0;j<G->vex;j++) G->arcs[i][j]=0; for(int k=0;k<G->arc;k++) { printf("请输入可以直达的两景点代号: \t"); scanf("%d%d",&i,&j); printf("请输入两景点的距离:\t"); scanf("%d",&n); G->arcs[i-1][j-1]=n; G->arcs[j-1][i-1]=n; } for(i=0;i<G->vex;i++) for(j=0;j<G->vex;j++) { if(G->arcs[i][j]==0&&i!=j) { G->arcs[i][j]=10000; G->arcs[j][i]=10000; } } } void dijkstra(Mgraph G,int v,char *name[]) { int dist[vnum]; int path[vnum][vnum]; int flag,k,min,m,n; for(int i=0;i<G.vex;i++) for(int j=0;j<G.vex;j++) path[i][j]=-1; for(i=0;i<G.vex;i++) { dist[i]=G.arcs[v-1][i]; if(dist[i]!=0&&dist[i]!=10000) { path[i][0]=v; path[i][1]=i+1; } } n=0; flag=1; while(flag) { k=0; min=10000; for(int j=0;j<G.vex;j++) if(dist[j]!=0&&dist[j]<min) { k=j; min=dist[j]; } printf("从%s到%s的最短路程为%d--(从%s出发,到",name[v-1],name[k],min,name[v-1]); j=2; while(path[k][j]!=-1&&j<G.vex ) //此处为了规范格式,最后的终点另外输出 { printf("%s, 再到",name[(path[k][j-1])-1]); j++; } printf("%s 结束).\n",name[path[k][j-1]-1]); //更新path和dist for(j=0;j<G.vex;j++) if(j!=k&&dist[j]!=0) if(dist[k]+G.arcs[k][j]<dist[j]) { dist[j]=dist[k]+G.arcs[k][j]; for(m=0;m<G.vex;m++) path[j][m]=path[k][m]; m=0; while(path[j][m]!=-1) //寻找path的最后一个下标 m++; path[j][m]=j+1; } dist[k]=0; flag=0; for(j=0;j<G.vex;j++) if(dist[j]!=0&&dist[j]<10000) flag=1; } } void dijkstra_file(Mgraph G,int v,char *name[]) { int dist[vnum]; int path[vnum][vnum]; int flag,k,min,m,n; char infile[20]; FILE *fp; for(int i=0;i<G.vex;i++) for(int j=0;j<G.vex;j++) path[i][j]=-1; for(i=0;i<G.vex;i++) { dist[i]=G.arcs[v-1][i]; if(dist[i]!=0&&dist[i]!=10000) { path[i][0]=v; path[i][1]=i+1; } } printf("* *请输入您要保存的文件名-----\n"); scanf("%s",infile); if((fp=fopen(infile,"w+"))==NULL) { printf("不好意思,小航无法帮您写入到文件里(;′⌒`)\n"); return; } n=0; flag=1; while(flag) { k=0; min=10000; for(int j=0;j<G.vex;j++) if(dist[j]!=0&&dist[j]<min) { k=j; min=dist[j]; } fprintf(fp,"从%s到%s的最短路程为%d--(从%s出发,到",name[v-1],name[k],min,name[v-1]); j=2; while(path[k][j]!=-1&&j<G.vex ) //此处为了规范格式,最后的终点另外输出 { fprintf(fp,"%s, 再到",name[(path[k][j-1])-1]); j++; } fprintf(fp,"%s 结束).\n",name[path[k][j-1]-1]); if(!fprintf(fp,"%s 结束).\n",name[path[k][j-1]-1])) { printf("抱歉,文件写入失败\n"); return; } //更新path和dist for(j=0;j<G.vex;j++) if(j!=k&&dist[j]!=0) if(dist[k]+G.arcs[k][j]<dist[j]) { dist[j]=dist[k]+G.arcs[k][j]; for(m=0;m<G.vex;m++) path[j][m]=path[k][m]; m=0; while(path[j][m]!=-1) //寻找path的最后一个下标 m++; path[j][m]=j+1; } dist[k]=0; flag=0; for(j=0;j<G.vex;j++) if(dist[j]!=0&&dist[j]<10000) flag=1; } printf("小航已成功帮您写入文件中~\n"); fclose(fp); } void asked(Mgraph G,int v,char *intro[],char *name[]) { printf("%d号景点:%s\n",v,name[v-1]); printf("景点简介\n"); printf(" %s\n",intro[v-1]); printf("* *\n"); printf("该景点临近的景点有~:"); for(int k=0;k<G.arc;k++) { if(G.arcs [v-1][k]>0&&G.arcs [v-1][k]<10000)
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服