数据结构作业 校园导航问题

校园导航问题(限1 人完成)

设计要求:设计你的学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径).

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <map>
using namespace std;
#define TITLE "路径查询系统"
const int MENU_MAIN_COUNT = 4;
const int MAXN = 1001;
const int INF = 0x3f3f3f3f;
bool vis[MAXN];
int pre[MAXN], lowcost[MAXN], ans[MAXN], cnt, q;
int cost[MAXN][MAXN];
int n, m, w;
string s, t, u, v;
map<string, int>mp;
map<int, string>mp2;
void input_road();
void show_road();
void exit_system();
void Dijkstra(int n, int beg) {
    for (int i = 0; i < n; i++) {
        lowcost[i] = INF;
        vis[i] = false;
        pre[i] =-1;
    }
    lowcost[beg] = 0;
    for (int j = 0; j < n; j++) {
        int k = -1;
        int Min = INF;
        for (int i = 0; i < n; i++) {
            if (!vis[i] && lowcost[i] < Min) {
                Min = lowcost[i];
                k = i;
            }
        }
        if (k == -1) break;
        vis[k] = true;
        for (int i = 0; i < n; i++) {
            if (!vis[i] && lowcost[k] + cost[k][i] < lowcost[i]) {
                lowcost[i] = lowcost[k] + cost[k][i];
                pre[i] = k;
            }
        }
    }
}

void init() {
    memset(cost, 0x3f, sizeof(cost));
    cnt = 1;
    q = 0;
    mp.clear();
    mp2.clear();
}

void add(string u) {
    if (!mp[u]) {
        mp[u] = cnt;
        mp2[cnt] = u;
        cnt++;
    }
}

void dfs(int u) {
    if (u == -1) return;
    ans[q++] = u;
    dfs(pre[u]);
}

void print_menu_title(char*title) {
    printf("=================================================\n");
    printf("| %s\n",title);
    printf("-------------------------------------------------\n");
}
char menu_main[]=
    "|\n"
    "| 1  输入路径\n"
    "| 2  查询路径\n"
    "| 3  退出\n"
    "|\n";
void (*menu_main_func[])()=
{
    input_road,
    show_road,
    exit_system
};
void print_menu_main() {
    int selected=0;
    system("cls");
    print_menu_title(TITLE);
    printf(menu_main);
    printf("=================================================\n");
    while(!(selected>=1&&selected<=MENU_MAIN_COUNT))
    {
        printf(">请选择:");
        scanf("%d",&selected);
        if(selected>=1&&selected<=MENU_MAIN_COUNT)
        {
            break;
        }
        printf("\n>输入错误!(请选择1 - %d)\n",MENU_MAIN_COUNT);
    }
    menu_main_func[selected-1]();
}
void input_road() {
    cout << "| 输入建筑数量 " << ‘ ‘ << " 输入路的数量 " << endl;
    cin >> n >> m;
    init();
    cout << "| 输入起点 " << endl;
    cin >> s; add(s);
    cout << "| 输入终点 " << endl;
    cin >> t; add(t);
    cout << "| 输出" << m << "条边的两个端点和长度 " << endl;
    for (int i = 0; i < m; i++) {
        cin >> u >> v >> w;
        add(u);  add(v);
        cost[mp[u]][mp[v]] = min(cost[mp[u]][mp[v]], w);
        cost[mp[v]][mp[u]] = cost[mp[u]][mp[v]];
    }
    print_menu_main();
}

void show_road() {
        Dijkstra(n+1, mp[s]);
        cout << "| 最短路径长度为:" << lowcost[mp[t]] << endl;
        dfs(mp[t]);
        cout << "| 路线为:" <<"         "<< mp2[ans[q-1]];
        for (int i = q-2; i >= 0; i--)
            cout << "->" << mp2[ans[i]];
        cout << endl;
        getchar();
        getchar();
        cout << "按任意键退出" << endl;
        print_menu_main();
}
void exit_system() {
    exit(0);
}

int main(){
    print_menu_main();
    return 0;
}
时间: 2024-10-13 06:28:31

数据结构作业 校园导航问题的相关文章

结对开发项目~校园导航

我们团队开发的是<校园导航> (1)N(Need需求) 最近学校新增加了许多国外交换生,以及介于很多同学对于学校的公共设施并不是那么了解,所以校园助手便应运而生 (2)A(Approach做法) 以前小学期有做过类似的项目,可以利用以前积累起来的经验进行改进 (3)B(Benefit好处) 便于同学老师以及游客利用手上最方便的导航工具来进行导航,去到自己想去的地方 (4)C(Competitors竞争) 目前好像没有小组做的一样的东西,而市面上例如百度地图都没有对学校有个详尽的描述

NABC框架 关于校园导航

在这里,我对于项目提出功能导航系统.即为每个导航地点分组,按功能属性统计并罗列在一起,在导航页面提供目的性查询,让客户通过勾选想要进行的活动来提供目的地和导航路线.并将各地点在功能搜索页面罗列出来并给出具体坐标.如:餐饮,上课,运动,购物,出行,标志建筑,专业分属等 Need:需求方面,直接从导航的根本目的出发,为路线实现现实的意义,将目的地功能与路线查询结合到一起,从客户的角度来思考,从客户查询路线的需求出发,为他们定制推荐路线以及罗列想要找的地点,就有很有意义的需求属 Approach  :

校园导航 NABC分析

校园导航是基于铁大校园的导航系统,能帮助刚入学的新生寻路,迅速适应校园. N:大一新生需要有个导航能为他们正确寻找道路,现在已有的地图太大,比如百度地图,谷歌地图,不够精确,希望有一款导航在校园里寻路: A:我们能迅速找出校园两个地点之间的最优路径,并显示在地图上,还能显示出距离:我们用C#做软件界面,数据库存放地点信息,通过关键字查找找出地点信息: B:这个软件的好处就是能清楚的显示出需要找的地点怎么走,更加精确,比百度地图等要精确,能让一点也不了解铁大的人在铁大畅行无阻: C:竞争者很多,有

校园导航测试版的使用心得

 郭林林:该程序实用性很强,也很富有创意,地图制作的很不错.但其中也有些不足之处:(1)打开界面时,地点图片为空,影响美观,建议设置默认图片.(2)查询下一地点时,仍保留了之前查询的路径,建议先清除,再显示本次查询的路径.(3)建议在查询的同时增加一些对地点的介绍,可增进外校人员对学校的了解.(4)可适量增加代码,实现地图的放大功能. 袁雪:经过了对校园导航系统的使用,觉得有一些意见--优点是便于操作,功能强大,导航能力也能很好的帮助人指出路线.缺点是界面不够美化. 杨霏:首先感觉校园导航很棒,

数据结构作业之数组

/* 编程作业 2.1 向highArray.java程序(清单2.3)的HighArray类添加一个名为getMax()的方法,它返回 数组中最大关键字的值,当数组为空时返回-1.向main()中添加一些代码来使用这个方法. 可以假设所有关键字都是正数. 2.2 修改编程作业2.1中的方法,使之不仅返回最大的关键字,而且还将该关键字从数组中删除. 将这个方法命名为removeMax(). 2.3 编程作业2.2中的removeMax()方法提供了一种通过关键字值进行数组排序的方法.实现一个 排

java程序代码代写、代写tree数据结构作业

java程序代码代写.代写tree数据结构作业实验三:java面向对象编程一.实验目的及要求1.理解 Java 语言是如何体现面向对象编程基本思想的:2.掌握类的声明以及对象的创建:3.了解类的成员变量和成员方法的特性以及类的构造方法的使用. 4.掌握类变量与实例变量以及类方法和实例方法的区别.二.实验内容1. 编写程序模拟两个村庄共同拥有一片森林.编写一个Village类,该类有一个静态的int型成员变量treeAmount用于模拟森林中树木的数量.在主类MainClass的方法中创建两个村庄

JAVA 图作业算法实现、代写Graphs 数据结构作业

JAVA 图作业算法实现.代写Graphs 数据结构作业Lab Case – Algorithms and Data Structure, 2017-2018Phase 3. GraphsCurrently, SharingCar only provides service in ten cities (Madrid, Barcelona, Valencia, Sevilla, Bilbao, Granada, Toledo, Salamanca, Alicante, Cáceres). Not

从CUMT校园导航出现的问题看CSS布局设计

先说说做的这个校园导航系统值得一提的内容: 1. 二级菜单栏  .iframe内嵌窗口(样式设计.用hover做效果) 2. 高德地图API (自定义底图样式.弹跳点.信息窗体.线路导航) 3. DOM里的函数getElementById(); (看了<JS DOM编程艺术>) 4. 返回顶部 JS实现 然后是小目标:1. 把博客园的样式自定义调整一下,算是对前面内容的回顾与联系,毕竟好久没看相关内容了. 2. 用bootstrap / ps 3. 下学期的自由时间把<JS高级程序设计&

数据结构作业--图遍历

数据结构老师布置一道题目,憋了一天才搞出来,还是练习地不够啊!不过班里面其他人搞出来的也不多啊! 题目 PS:头文件是老师给的. 一.请建立一个空项目,添加GraphTraverseTest.cpp源文件和AdjMWGraph.h.AdjLWGraph.h.CreatAdjWGraph.h.AdjWGraphApp.h.SeqList.h.SeqQueue.h等六个头文件.其中: AdjMWGraph.h头文件采用邻接矩阵实现带权有向图数据结构:    AdjLWGraph.h头文件采用邻接表实