图的应用:校园导游系统(含Dijkstra和Floyd算法)

/* 
问题描述:用无向网表示你所在学校的校园景点平面图,图中顶点表示主要景点, 
存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。 
要求能够回答有关景点介绍、游览路径等问题。 
基本要求:查询各景点的相关信息; 
查询图中任意两个景点间的最短路径; 
查询图中任意两个景点间的所有路径;增加、删除、更新有关景点和道路的信息。 
选作内容: 
1.求多个景点的最佳(最短)游览路径。 
2.区分机动车道和人行道。 
3.实现导游图的仿真界面。 
 
注:很惭愧,有关基于邻接矩阵存储的无向图某两点之间的所有路径的相关算法我真的不会,另外由于时间关系选做的我也没做,对不起王阿川老师T_T 
*/  
  
#include   
#include   
#include   
#include   
#include   
#include   
#define INFINITY 65535    //无穷大,即不相邻  
#define MAX_VERTEX_NUM 20 //最大的顶点个数  
using namespace std;  
typedef int VRType;  
typedef char InfoType;  
  
typedef struct{  
    int num;  
    char name[20];  
    char introduce[100];  
}VertexType;  
  
typedef struct ArcCell{  
    VRType adj; //距离  
    InfoType *info;//边的信息  
}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];  
  
typedef struct {  
    VertexType vex[MAX_VERTEX_NUM];//顶点向量  
    AdjMatrix arcs; //邻接矩阵  
    int vexnum,arcnum; //顶点数和边数  
}MGraph;  
  
void create(MGraph &g,VertexType site[])  
{  
    int i,j;  
    g.vexnum=11;  
    g.arcnum=12;  
    for(i=0;i<11;i++)  
        g.vex[i]=site[i];  
    for(i=0;i=1&&i<=11)  
    {  
        printf("请输入新的景点名称:\n");  
        scanf("%s",g.vex[i-1].name);  
        printf("请输入新的景点名称简介:\n");  
        scanf("%s",g.vex[i-1].introduce);  
    }  
}  
  
void add_arc(MGraph &g)  
{  
    int v1,v2,n;  
    printf("请输入你想增加的边两端的顶点序号:\n");  
    printf("请输入第一个顶点号:\n");  
    scanf("%d",&v1);  
    printf("请输入第二个顶点号:\n");  
    scanf("%d",&v2);  
    if(g.arcs[v1-1][v2-1].adj==INFINITY)  
    {  
        printf("请输入两点之间的距离:\n");  
        scanf("%d",&g.arcs[v1-1][v2-1].adj);  
        g.arcs[v2-1][v1-1].adj=g.arcs[v1-1][v2-1].adj;  
        printf("增加成功!\n");  
    }  
    else  
    {  
LL0:    printf("这两点已经有路径存在了,你想要修改它吗?想的话请按1,不想请按2:\n");  
        scanf("%d",&n);  
        if(n==1)  
        {  
            printf("请输入两点之间的新的距离:\n");  
            scanf("%d",&g.arcs[v1-1][v2-1].adj);  
            g.arcs[v2-1][v1-1].adj=g.arcs[v1-1][v2-1].adj;  
            printf("修改成功!\n");  
        }  
        else if(n==2)  
        {  
            printf("增加失败,呜呜呜T_T\n");  
        }  
        else  
        {  
            printf("你的输入有误,请重新输入!\n");  
            goto LL0;  
        }  
    }  
}  
  
void delete_arc(MGraph &g)  
{  
    int v1,v2;  
    printf("请输入你想删除的边两端的顶点序号:\n");  
    printf("请输入第一个顶点号:\n");  
    scanf("%d",&v1);  
    printf("请输入第二个顶点号:\n");  
    scanf("%d",&v2);  
    if(g.arcs[v1-1][v2-1].adj!=INFINITY)  
    {  
        g.arcs[v1-1][v2-1].adj=g.arcs[v2-1][v1-1].adj=INFINITY;  
        printf("删除成功!\n");  
    }  
    else  
    {  
        printf("删除失败!这两个点之间本来就没有直接通路,你还删它干嘛???\n");  
    }  
}  
  
void display_num(MGraph g)  
{  
     int i;  
    printf("景点序号   景点名称\n");  
    for(i=0;i

图的应用:校园导游系统(含Dijkstra和Floyd算法)_第1张图片


图的应用:校园导游系统(含Dijkstra和Floyd算法)_第2张图片

你可能感兴趣的:(图)