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

/* 
问题描述:用无向网表示你所在学校的校园景点平面图,图中顶点表示主要景点, 
存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。 
要求能够回答有关景点介绍、游览路径等问题。 
基本要求:查询各景点的相关信息; 
查询图中任意两个景点间的最短路径; 
查询图中任意两个景点间的所有路径;增加、删除、更新有关景点和道路的信息。 
选作内容: 
1.求多个景点的最佳(最短)游览路径。 
2.区分机动车道和人行道。 
3.实现导游图的仿真界面。 
 
注:很惭愧,有关基于邻接矩阵存储的无向图某两点之间的所有路径的相关算法我真的不会,另外由于时间关系选做的我也没做,对不起王阿川老师T_T 
*/  
  
#include <iostream>  
#include <stdio.h>  
#include <string.h>  
#include <iomanip>  
#include <stdlib.h>  
#include <math.h>  
#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<g.vexnum;i++)  
        for(j=0;j<g.vexnum;j++)  
            g.arcs[i][j]={INFINITY,NULL};  
    g.arcs[0][1].adj=200;  
    g.arcs[1][2].adj=150;  
    g.arcs[2][3].adj=50;  
    g.arcs[3][4].adj=100;  
    g.arcs[4][5].adj=50;  
    g.arcs[5][9].adj=300;  
    g.arcs[6][7].adj=450;  
    g.arcs[6][9].adj=500;  
    g.arcs[0][4].adj=300;  
    g.arcs[0][7].adj=250;  
    g.arcs[9][10].adj=700;  
    g.arcs[7][8].adj=20;  
    for(i=0;i<g.vexnum;i++)  
        for(j=0;j<g.vexnum;j++)  
            g.arcs[j][i].adj= g.arcs[i][j].adj;  
  
}  
  
void output(MGraph g,int i)//根据序号i输出对应的景点的相关信息  
{  
    printf("景点序号:%d\n",i);  
    printf("景点名称:%s\n",g.vex[i-1].name);  
    printf("景点简介:%s\n",g.vex[i-1].introduce);  
}  
  
void search(MGraph g)  
{  
    int i;  
    printf("请输入你想查找的景点的序号:\n");  
    scanf("%d",&i);  
    output(g,i);  
}  
  
void Shortest_Path_Dijkstra(MGraph g,int v0,int P[][20],int D[20])  
{  
    int v,w,i,j,final[20],min;  
    for(v=0;v<g.vexnum;v++){  
       
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值