数据结构课设

该博客介绍了如何构建一个校园导游系统,包括初始化图、查询景点位置、查找最短路径和所有路径。系统使用邻接矩阵表示图,并实现了迪杰斯特拉算法和弗洛伊德算法来求解最短路径。用户还可以通过增加、删除节点和边,以及更新图信息来自定义校园地图。此外,系统提供了用户登录和地图展示功能,方便用户查询和了解校园景点信息。

#include<iostream>
#include<iomanip>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
#define TRUE      1
#define FALSE     0
#define OVERFLOW -2
#define OK        1
#define ERROR     0
#define MAX       100
#define INFINITY  100000 //用100000表示最大值∞
#define MAX_VERTEX_NUM 20//用于邻接矩阵
typedef int Status;
typedef struct ArcCell//边的定义
{
    int weight;//边的权值
}ArcCell,AdjMtrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//边的邻接矩阵类型
typedef struct VertexType//顶点信息
{
    int number;//顶点编号
    char name[64];//顶点名称
    char intro[256];//顶点介绍
}VertexType;
typedef struct MGraph
{//图的定义
    VertexType vexs[MAX_VERTEX_NUM];//顶点数组
    AdjMtrix arcs;//邻接矩阵
    int vexnum,arcnum;//图的当前顶点数、边数
}MGraph;
//全局变量
MGraph campus;//图结构变量(学校校园)
int d[30];
int visited[50];
int shortest[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//定义全局变量存储最小路径 
int pathh[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//定义存储路径
//1.图的初始化
MGraph InitMGraph()
{
    MGraph map;//构造图map
    int i,j;
    map.vexnum=15;//顶点个数
    map.arcnum=23;//边的条数
    for(i=1;i<=map.vexnum;i++)//依次设置顶点信息
        map.vexs[i].number=i;
    strcpy(map.vexs[1].name,"西苑宿舍");strcpy(map.vexs[1].intro,"位于学校最西端,学生住宿场所");
    strcpy(map.vexs[2].name,"西苑餐厅");strcpy(map.vexs[2].intro,"为西苑学生提供就餐场所");
    strcpy(map.vexs[3].name,"地下通道");strcpy(map.vexs[3].intro,"连接东苑与西苑,上方为公路");
    strcpy(map.vexs[4].name,"文体馆");strcpy(map.vexs[4].intro,"学校举办文体活动的场所");
    strcpy(map.vexs[5].name,"体育场");strcpy(map.vexs[5].intro,"五环体育场");
    strcpy(map.vexs[6].name,"东苑宿舍");strcpy(map.vexs[6].intro,"东苑学生住宿场所");
    strcpy(map.vexs[7].name,"东苑餐厅");strcpy(map.vexs[7].intro,"有博爱海都润兴三大餐厅,为东苑学生提供就餐场所");
    strcpy(map.vexs[8].name,"农大花园");strcpy(map.vexs[8].intro,"在这里可以欣赏到学校的一处优美的景色");
    strcpy(map.vexs[9].name,"虹子湖");strcpy(map.vexs[9].intro,"学校的湖,景色优美");
    strcpy(map.vexs[10].name,"足球场");strcpy(map.vexs[10].intro,"位于学校最东端,为学生踢球场所");
    strcpy(map.vexs[11].name,"科技楼信息楼化学楼");strcpy(map.vexs[11].intro,"这里有学校的信息楼,科技楼,化学楼");
    strcpy(map.vexs[12].name,"办公楼图书馆生物楼");strcpy(map.vexs[12].intro,"这里有学校的办公楼,图书馆,生物楼");
    strcpy(map.vexs[13].name,"教学楼");strcpy(map.vexs[13].intro,"学生学习的场所");
    strcpy(map.vexs[14].name,"工程楼,文经楼");strcpy(map.vexs[14].intro,"这里有学校的工程楼,文经楼");
    strcpy(map.vexs[15].name,"虹子广场");strcpy(map.vexs[15].intro,"刚步入学校南门的广场,举办各种活动的地方");
    for(i=1;i<=map.vexnum;i++)
        for(j=1;j<=map.vexnum;j++)
            map.arcs[i][j].weight=INFINITY;//初始化邻接矩阵
    map.arcs[1][2].weight=10;map.arcs[2][3].weight=40;map.arcs[3][4].weight=20;map.arcs[3][8].weight=40;map.arcs[3][11].weight=40;
    map.arcs[4][5].weight=20;map.arcs[4][8].weight=20;map.arcs[5][6].weight=30;map.arcs[5][8].weight=30;map.arcs[6][7].weight=10;
    map.arcs[6][9].weight=70;map.arcs[7][9].weight=60;map.arcs[7][10].weight=40;map.arcs[8][9].weight=10;map.arcs[9][10].weight=30;
    map.arcs[9][13].weight=15;map.arcs[9][14].weight=30;map.arcs[10][14].weight=10;map.arcs[11][12].weight=50;map.arcs[11][15].weight=70;
    map.arcs[12][13].weight=5;map.arcs[12][15].weight=10;map.arcs[13][14].weight=40;
    for(i=1;i<=map.vexnum;i++)
        for(j=1;j<=map.vexnum;j++)
            map.arcs[j][i].weight=map.arcs[i][j].weight;
    return map;
}
//2.查询景点在图中的序号
Status LocateVex(MGraph map,int v)
{
    int i;
    for(i=0;i<=map.vexnum;i++)
    {
        if(map.vexs[i].number==v)
            return i;
    }
    return -1;
}
//3.查询输入序号l,n间的长度不超过10个景点的路径
void path(MGraph map,int l,int n,int k)
{
    int s,t=k+1;int length=0;//t用于存储路径上下一顶点对应的d[]数组元素的下标
    if(d[k]==n&&k<8)//若d[k]是终点且景点个数<8,则输出该路径
    {
        for(s=0;s<k;s++)
        {
            length=length+map.arcs[d[s]][d[s+1]].weight;
        }
        if(length<200)//打印路径小于200(定长)的路径
        {
            for(s=0;s<k;s++)//输出该路径,s=0时为起点m
            {
                cout<<d[s]<<map.vexs[d[s]].name<<"--->";
            }
            cout<<d[s]<<map.vexs[d[s]].name<<endl;
            cout<<"总路线长为"<<length<<"米\n"<<endl;//输出最后一个顶点
        }
    }
    else
    {
        s=1;
        while(s<=map.vexnum)//从第m个顶点,访问所有顶点是否有路径
        {
            if((map.arcs[d[k]][s].weight<INFINITY)&&(visited[s]==0))//顶点有边且未被访问
            {
                visited[s]=1;
                d[k+1]=s;//存储顶点编号
                path(map,l,n,t);
                visited[s]=0;//将找到的路径上的顶点的访问标志重新设置为,便于探究新的路径
            }
            s++;//试验下一顶点s开始是否有到终点的路径;
        }
    }
}
//4.查询两景点的所有路径
int allpath(MGraph map)
{
    int k,i,j,l,n;
    cout<<"请输入您想要查询的两个景点的编号:";
    cin>>i>>j;
    l=LocateVex(map,i);//LocateVex 确定该顶点是否存在。若存在,返回该顶点编号。 
    n=LocateVex(map,j);
    d[0]=l;//路径起点l(字母).(d[]数组为全局变量)
    for(k=0;k<map.vexnum;k++)
        visited[k]=0;
    visited[l]=1;
    path(map,l,n,0);
    return OK;
}
//5.迪杰斯特拉算法求单源最短路径
void ShortestPath_DIJ(MGraph map)
{
    int v0,v,w,k=1,min,t,p;
    int final[MAX_VERTEX_NUM];//final[w]=1表示已经求得顶点V0到Vw的的最短路径
    int Pathside[MAX_VERTEX_NUM];//用于存储最短路径下标的数组
    int ShortPathwet[MAX_VERTEX_NUM];//用于存储到各点最短路径的权值和
    cout<<"请输入起始景点的编号:";
    cin>>v0;
    while(v0<0||v0>map.vexnum)//判断是否输入正确
    { 
        cout<<"您输入的景点编号不存在,请重新输入"<<endl;
        cin>>v0;
    }
    for(v=1;v<=map.vexnum;v++)//数组初始化
    {
        final[v]=0;//全部顶点初始化为未找到路径
        ShortPathwet[v]=map.arcs[v0][v].weight;//将与v0有连线的路径加上权值
        Pathside[v]=0;//初始化路径数组为0
    }
    ShortPathwet[v0]=0;
    final[v0]=1;
    //Dijkstr算法主体
    for(v=1;v<=map.vexnum;v++)
    {
        min=INFINITY;
        for(w=1;w<=map.vexnum;w++)//找出离当前指向顶点最近的点
        {
            if(!final[w]&&ShortPathwet[w]<min)//未被访问且存在边
            {
                k=w;
                min=ShortPathwet[w];
            }
        }
        final[k]=1;//将找到的离当前顶点最近的置1
        //修正
        for(w=1;w<=map.vexnum;w++)
        {
            if(!final[w]&&(min+map.arcs[k][w].weight<ShortPathwet[w]))
            {
                ShortPathwet[w]=min+map.arcs[k][w].weight;//修改当前最优路径长度
                Pathside[w]=k;//存放前驱结点
            }
        }
    }
    cout<<"打印P数组:";     //打印p数组
    for(t=1;t<=map.vexnum;t++)
    {
        cout<<Pathside[t]<<"  ";
    }
    cout<<endl;
    cout<<"打印S数组:"; //打印s数组
    for(t=1;t<=map.vexnum;t++)
    {
        cout<<ShortPathwet[t]<<"  ";
    }
    cout<<endl;
    //打印最短路径
    for(t=1;t<=map.vexnum;t++)
    {
        p=t;
        if(t!=v0)
        {
            cout<<t<<map.vexs[t].name;
            for(w=1;w<=map.vexnum;w++)
            {
                if(Pathside[p]!=0)
                {
                    cout<<"<--"<<Pathside[p]<<map.vexs[p].name;
                    p=Pathside[p];
                }
            }
            cout<<"<--"<<v0<<map.vexs[v0].name<<endl;
            cout<<"总路线长为"<<ShortPathwet[t]<<"米\n"<<endl;
        }
    }
}
//6.主页
void menu()
{
 cout << " ┌──────────────────────────────────────────────────────┐" << endl;
 cout << " │ ╭ ═══════════════════════════════════════════════ ╮  │" << endl;
 cout << " │ ││        欢 迎 使 用 校 园 导 游 系 统          ││  │" << endl;
 cout << " │ ╰ ═══════════════════════════════════════════════ ╯  │" << endl;
 cout << " │                      欢迎来到                        │" << endl;
 cout << " │                     燕 山 大 学                      │" << endl;
 cout << " │                     菜 单 选 择                      │" << endl;
 cout << " │  *************************************************** │" << endl;
 cout << " │  *  1.主页                **   2.查看游览路线      * │" << endl;
 cout << " │  *************************************************** │" << endl;
 cout << " │  *  3.查询景点间最短路径  **   4.查询景点间所有路径* │" << endl;
 cout << " │  *************************************************** │" << endl;
 cout << " │  *  5.学校景点介绍        **   6.学校地图          * │" << endl;
 cout << " │  *************************************************** │" << endl;
 cout << " │  *  7.更改图信息          **   0.退出              * │" << endl;
 cout << " │  *************************************************** │" << endl;
 cout << " └──────────────────────────────────────────────────────┘" << endl;
}
//以下是修改图的相关信息。
//7.重新构造图
int creatmap(MGraph &map)
{
    int i,j,l,n,v0,v1,distance;
    cout<<"请输入图的顶点数和边数:";
    cin>>map.vexnum>>map.arcnum;
    cout<<"请输入顶点信息:";
    for(i=0;i<=map.vexnum;i++)//输入各顶点对应的景点信息
    {
        cout<<"请输入景点编号:";
        cin>>map.vexs[i].number;
        cout<<"请输入景点名称:";
        cin>>map.vexs[i].name;
        cout<<"请输入景点简介:";
        cin>>map.vexs[i].intro;
    }
    for(i=0;i<=map.vexnum;i++)//权值初始化为无穷
        for(j=0;j<=map.vexnum;j++)
            map.arcs[i][j].weight=INFINITY;
    printf("请输入图中各景点边的信息 \n");
    for(i=1;i<=map.arcnum;i++)
    {
        cout<<"请输入第"<<i<<"条边的起点,终点,长度为:";
        cin>>v0>>v1>>distance;
        l=LocateVex(campus,v0);
        n=LocateVex(campus,v1);
        if(l>0&&n>0)
        {
            map.arcs[l][n].weight=distance;
            map.arcs[n][l].weight=map.arcs[l][n].weight;
        }
    }
    return OK;
}
//8.更改图部分信息
int newmap(MGraph &map)
{
    int changenum,i,l,n,t,distance,v0,v1;
    cout<<"下面请输入你要修改的景点的个数:";//修改定点对应的景点
    cin>>changenum;
    while(changenum<0||changenum>map.vexnum)
    {
        cout<<"你的输入有误,请重新输入";
        cin>>changenum;
    }
    for(i=0;i<changenum;i++)
    {
        cout<<"请输入景点编号:";
        cin>>l;
        t=LocateVex(campus,l);
        cout<<"请输入修改后景点的名称:";
        cin>>map.vexs[i].name;
        cout<<"请输入修改后景点的简介:";
        cin>>map.vexs[i].intro;
    }
    cout<<"下面请输入你要修改的边的个数:";
    cin>>changenum;
    while(changenum<0||changenum>map.vexnum);
    {
        cout<<"你的输入有误,请重新输入";
        cin>>changenum;
    }
    if(changenum!=0)
        cout<<"下面请输入更新边的信息:";
    for(i=1;i<=changenum;i++)
    {
        cout<<"修改的第"<<i<<"条边的起点,终点,长度为:";
        cin>>v0,v1,distance;
        l=LocateVex(campus,v0);
        n=LocateVex(campus,v1);
        if(l>=0&&n>=0)
        {
            map.arcs[l][n].weight=distance;
            map.arcs[n][l].weight=map.arcs[l][n].weight;
        }
    }
    return OK;
}
//9.增加一条边
int addside(MGraph &map)
{
    int l,n,distance;
    cout<<"请输入边的起点和终点编号,权值:";
    cin>>l>>n>>distance;
    while(l<0||l>map.vexnum||n<0||n>map.vexnum)
    {
        cout<<"你的输入有误,请重新输入";
        cin>>l>>n;
    }
    if(LocateVex(campus,l)<0)
    {
        cout<<"此节点"<<l<<"已删除";
        return OK;
    }
    if(LocateVex(campus,n)<0)
    {
        cout<<"此节点"<<n<<"已删除";
        return OK;
    }
    map.arcs[l][n].weight=distance;
    map.arcs[n][l].weight=map.arcs[l][n].weight;
    map.arcnum++;
    return OK;
}
//10.增加一个结点
int addvex(MGraph &map)
{
    int i;
    map.vexnum++;//顶点数加一
    cout<<"请输入您要增加结点的信息:"<<endl;
    cout<<"编号:";
    cin>>map.vexs[map.vexnum].number;
    cout<<"名称:";
    cin>>map.vexs[map.vexnum].name;
    cout<<"简介:";
    cin>>map.vexs[map.vexnum].intro;
    for(i=1;i<=map.vexnum;i++)
    {
        map.arcs[map.vexnum][i].weight=INFINITY;
        map.arcs[i][map.vexnum].weight=INFINITY;
    }
    return OK;
}
//11.删除一个结点
int delvex(MGraph &map)
{
    int i=0,j,l,v;
    if(map.vexnum<=0)
    {
        cout<<"图中已无顶点";
        return OK;
    }
    cout<<"下面请输入您要删除的景点编号:";
    cin>>v;
    while(v<0||v>map.vexnum)
    {    
        cout<<"你的输入有误,请重新输入";
        cin>>v;
    }
    l=LocateVex(campus,v);
    if(l<0)
    {    
        cout<<"顶点"<<v<<"已删除"<<endl;
        return OK;
    }
    for(i=l;i<=map.vexnum-1;i++)
        for(j=1;j<=map.vexnum;j++)//将二维数组中的第m+1行依次向前移动一行(删除第m行) 
            map.arcs[i][j]=map.arcs[i+1][j]; 
    for(i=l;i<=map.vexnum-1;i++)
        for(j=1;j<=map.vexnum;j++)//将二维数组中的第m+1列依次向前移动一列(删除第m列)
            map.arcs[j][i]=map.arcs[j][i+1];
    map.vexs[v].number=-1;//表示此点已删除,后期打印也不会显示该点 
    map.vexnum--;//顶点个数-1 
    return OK;
}
//12.删除一条边
int delside(MGraph &map)
{
    int l,n,v0,v1;
    if(map.vexnum<=0)
    {
        cout<<"图中已无边,无法删除";
        return OK;
    }
    cout<<"下面请输入您要删除的边的起点和终点编号:";
    cin>>v0,v1;
    l=LocateVex(campus,v0);
    if(l<0)
    {    
        cout<<"此顶点"<<v0<<"已删除";
        return OK;
    }
    n=LocateVex(campus,v1);
    if(n<0)
    {
        cout<<"此顶点"<<v1<<"已删除";
        return OK;
    }
    map.arcs[l][n].weight=INFINITY;//将删掉的边的权值改为无穷
    map.arcs[n][l].weight=INFINITY;
    map.arcnum--;//图的边数减一
    return OK;
}
//13.输出图的邻接矩阵的值
void printmap(MGraph map)
{
    int i,j,k=0;
    for(i=1;i<=map.vexnum;i++)
    {
        if(map.vexs[i].number!=-1)
            cout<<setw(6)<<i;
    }
    cout<<endl;
    for(i=1;i<=map.vexnum;i++)
    {
        for(j=1;j<=map.vexnum;j++)
        {
            if(map.arcs[i][j].weight==INFINITY)
                cout<<" **** ";
            else
                cout<<setw(6)<<map.arcs[i][j].weight;
            k++;
            if(k%map.vexnum==0)
                cout<<endl;
        }
    }
}
//14.图的操作主函数
int changemap(MGraph &map)
{
    int choice;
    cout<<"1 重新建图     2 删除结点      3 删除边"<<endl;
    cout<<"4 增加结点     5 增加边        6 更新信息"<<endl;
    cout<<"7 输出邻接矩阵 8 返回主页"<<endl;
    do
    {
        cout<<"请输入你的选择:";
        cin>>choice;
        switch(choice)
        {
            case 1:creatmap(map);break;
            case 2:delvex(map);break;
            case 3:delside(map);break;
            case 4:addvex(map);break;
            case 5:addside(map);break;
            case 6:newmap(map);break;
            case 7:printmap(campus);break;
            case 8:system("cls");menu();return OK;
            default:cout<<"未找到该功能,请输入有效选项!"<<endl;break;
        }
    }while(choice);
}
//15.用户登录
int userlog()
{
    int i;
    int a[6]={1,2,3,4,5,6},b[6];
    cout<<"请输入六位密码(用空格隔开):";
    for(i=0;i<6;i++)
        cin>>b[i];
    for(i=0;i<6;i++)
    {
        if(a[i]!=b[i])
        {
            cout<<"密码错误!自动返回主页面";
            menu();
            return 0;
        }
    }
    cout<<"密码正确,登陆成功!"<<endl;
    changemap(campus);
}
//16.弗洛伊德算法
void floyd(MGraph map)
{
    int i,j,k;
    for(i=1;i<=map.vexnum;i++)//将图的邻接矩阵赋值给 shortest二维数组,将矩阵pathh全部初始化为-1 
    {
        for(j=1;j<=map.vexnum;j++)
        {
            shortest[i][j]=map.arcs[i][j].weight;
            pathh[i][j]=j;
        }
    }
    int ii,jj,k1=0;
    //for(ii=1;ii<=map.vexnum;ii++)
        //cout<<ii;
    //cout<<ii;
    for(ii=1;ii<=map.vexnum;ii++)
    {
        //cout<<ii;
        for(jj=1;jj<=map.vexnum;jj++)
        {
            //cout<<pathh[ii][jj];
            k1++;
            //if(k1%map.vexnum==0)
                //cout<<endl;
        }
    }
    cout<<endl;
    for(k=1;k<=map.vexnum;k++)//核心操作,完成了以k为中间点对所有的顶点对(i,j)进行检测和修改 
    {    for(i=1;i<=map.vexnum;i++)
    {    for(j=1;j<=map.vexnum;j++)
             {
                 if(shortest[i][j]>shortest[i][k]+shortest[k][j])
                 {    shortest[i][j]=shortest[i][k]+shortest[k][j];                     
                      pathh[i][j]=pathh[i][k];//记录一下所走的路 //P数组用来存放前驱顶点  
                }
             }
        }
    }
}
//17.输出数组
void printarray(MGraph map)
{
    int i,j,k=0;
    for(i=1;i<=map.vexnum;i++)
        cout<<setw(6)<<i;
    cout<<endl;
    for(i=0;i<=map.vexnum;i++)
    {
        cout<<i;
        for(j=1;j<=map.vexnum;j++)
        {
            cout<<setw(6)<<pathh[i][j];
            k++;
            if(k%map.vexnum==0)
                cout<<endl;
        }
    }
    cout<<endl;
}
//18.输出最短路径
void display(MGraph map,int i,int j)
{
    int a,b;
    a=i,b=j;
    cout<<"您要查询的两景点间最短路径:"<<endl;
    cout<<a<<map.vexs[a].name;
    while(pathh[i][j]!=b)
    {
        cout<<"-->"<<pathh[i][j]<<map.vexs[pathh[i][j]].name;
        i=pathh[i][j];
    }
    cout<<"-->"<<b<<map.vexs[b].name<<endl;
    cout<<map.vexs[a].name<<"-->"<<map.vexs[b].name<<"的最短路径是:"<<shortest[a][b]<<"米"<<endl;
}
//19任意两点间距离(16-19)
int shortdistance(MGraph map)
{
    int i,j;
    cout<<"请输入要查询的两个景点的数字编号(用空格隔开):";
    cin>>i>>j;
    if(i<0||i>map.vexnum||j<0||j>map.vexnum)
    {
        cout<<"输入信息有误!"<<endl;
        cout<<"请重新输入要查询的两个景点的数字编号(用空格隔开)";
        cin>>i>>j;
    }
    else
    {
        floyd(map);
        //printarray(map);
        display(map,i,j);
    }
    return OK;
}
//20显示所有景点信息
void compusinfor(MGraph map)
{
    int i;
    cout<<"\n\n编号     景点名称                        简介\n"<<endl;
    cout<<"*************************************************************************"<<endl;
    for(i=1;i<=map.vexnum;i++)
    {
        if(map.vexs[i].number!=-1)
            cout<<setw(9)<<setiosflags(ios::left)<<map.vexs[i].number<<setw(22)<<setiosflags(ios::left)<<map.vexs[i].name<<setw(10)<<setiosflags(ios::left)<<map.vexs[i].intro<<endl;
    }
    cout<<"*************************************************************************"<<endl;
}
void schoolmap()
{
    cout << " _______________________________________________________________________________________________________________________________________________________________________________________________________" << endl;
 cout << "|-------------------------------------------------------------------------------------燕山大学平面图----------------------------------------------------------------------------------------------------|" << endl;
 cout << "|                                                                                                                                                                                                       |" << endl;
 cout << "|    *29(后海)                                                                                                                                                                                         |" << endl;
 cout << "|     \\                                                                                                                                                                                                |" << endl;
 cout << "|     *26(四体)------*27(艺术学院)------*28(第五教学楼)                                                                                                                                               |" << endl;
 cout << "|     |      \\                                     \\                                                 *5(五号门)       *33(二体)                                                                       |" << endl;
 cout << "|     |        -------                              \\                                                |                      /   \\                                                                     |" << endl;
 cout << "|     *25(公寓12-13 )\\                              \\                                               |                    /       \\                                                                   |" << endl;
 cout << "|     |                *22(燕园餐厅)----*20(理学院)---*19(西校区第一教学楼)                          |                  /           \\                                                                 |" << endl;
 cout << "|     |                   \\                   |             \\                                        |                /             *34(东区四教)                                                    |" << endl;
 cout << "|     *23(公寓10-11)       \\                *21(电气学院)---*18(西校区第二教学楼)       *30(塔山)--*4(图书馆)---*32(燕宏桥)          /      \\                                                       |" << endl;
 cout << "|     |                       \\                               \\                           |          |                               /         \\                                                      |" << endl;
 cout << "|     *24(超市)--*13(公寓8-9)--*12(校医院)----*15(材料学院)----*17(西校区第三教学楼)     |          |                             /            \\                                                     |" << endl;
 cout << "|               |              |                                 |                        |          |                         *36(世纪楼--------*35(东区1-2教)                                         |" << endl;
 cout << "|               |              |                                 *16(西校区第四教学楼)    |          |                          东区图书馆)            |                                               |" << endl;
 cout << "|               *14(公寓6-7)   *11(西校区大食堂)                /                        |          |                            /  \\                  |                                               |" << endl;
 cout << "|                              |             |  \\               /                         |          |                          /     \\                 |                                               |" << endl;
 cout << "|                              |             |   --------      /                          |          |                        *38      \\                |                                               |" << endl;
 cout << "|                              |             |          \\     /                           |          |                     (东区食堂)  \\               |                                               |" << endl;
 cout << "|                              |             |           *8(圆盘)-*7(里仁行政楼)-*6(里仁教学楼)---*3(三体)                    /           \\             |                                               |" << endl;
 cout << "|                              *10(公寓4-5)  |            |      /              /                 |                          /           *37(燕明湖)    |                                               |" << endl;
 cout << "|                                            * 9(公寓1-3) |-----*1(西大活)---*2(里仁图文信息楼)-*31(里仁实验楼)           *39(东区学生公寓)             |                                               |" << endl;
 cout << "|                                                      \\  |         /                                                           \\                 *41(一体)------42*(一号门)                          |" << endl;
 cout << "|                                                         *0(七号门)                                                               \\              /                                                    |" << endl;
 cout << "|                                                                                                                                    \\           /                                                     |" << endl;
 cout << "|                                                                                                                                      \\        /                                                      |" << endl;
 cout << "|                                                                                                                                         *40(东大活)                                                   |" << endl;
 cout << "|_______________________________________________________________________________________________________________________________________________________________________________________________________|" << endl;
}
//22用户界面
void mainwork()
{
    menu();
    int choice;
    campus=InitMGraph();
    do
    {
        cout<<"请输入你的选择:";
        cin>>choice;
        switch(choice)
        {
        case 1:system("cls");menu();break;
        case 2:system("cls");ShortestPath_DIJ(campus);break;
        case 3:system("cls");shortdistance(campus);break;
        case 4:system("cls");allpath(campus);break;
        case 5:system("cls");compusinfor(campus);break;
        case 6:system("cls");schoolmap();break;
        case 7:system("cls");userlog();break;
        case 0:system("cls");cout<<"谢谢使用";break;
        default:cout<<"未找到该功能,请输入有效选项!"<<endl;break;
        }
    }while(choice);
}
int main()
{
    mainwork();
    return 0;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值