校园导游咨询系统(数据结构课程设计)

这是大一下学期的课程设计,也是第一次写课程设计与实验报告(论文)。
经过在老师那里答辩自己也发现了一些问题。
论文及代码已经上传资源,有需要的小伙伴可以去下载奥。

首先实验里用到了文件存取、最短路径算法(dijkstra)、深度优先搜索等算法。在实验里加了查询两景点间所有路径,嗯我用了20个景点,但是用这个用法查找的路径有很多条,有些对有些错,我也找不出来哪里有错误(有大佬的话希望能够指点指点)。然后说说实验中可以优化的地方。

  1. 景点简介信息
    景点简介信息我并未放进结构体里,我是直接输出,等到后面发现不应该这样写的时候又不愿改了(说到底还是有点懒啊)。

  2. 校园平面图
    可以考虑放入文件中,如果还要完美的话应该增加功能(可以让管理员增加景点或者增加路径)。用那么多printf打印平面图我是有多不容易,加油学吧。

  3. 路径
    我是直接在程序中定义好了所有路径,老师问:“你定义死了啊?”,我一头问号,终究还是太菜,也应该将邻接矩阵放入文件中然后读取(方便修改)。

我画的校园地图,白色的路汽车专用道路,黑色的通用
我画的校园地图,白色的路汽车专用道路,黑色的通用。

代码如下(写的很粗糙还有很多不足),仅供参考。

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<ctime>
#include<conio.h>
using namespace std;
const int maxv = 50;
const int inf = 1000000;
typedef struct{
    int G[maxv][maxv];
    int G1[maxv][maxv];
    int vis[maxv];
    int d[maxv];
    int pre[maxv];
}Graph;
typedef struct LNode
{
    char name[10];
    char pass[10];
    struct LNode *next;
} LNode,*pNode;
//定义节点
int way[maxv] = {0};
int n = 20,m;
int count1 = 0;
const int maxsize = 10000;
char mean[25][15] = {"","校门","教学楼","马克思楼","超市","宿舍(40)","餐厅","菜鸟驿站","礼堂","共享单车","图书馆","养心湖"\
                    ,"汽车站","宾馆","宿舍(20)","体育馆","医院","基础实验大楼","银行","公园","小吃街"};
                    
pNode createList()
{
	//此函数是为了构造一个链表,存储用户信息用的。
    pNode pHead = (pNode)malloc(sizeof(LNode));
    pHead->next=NULL;
	
	//以读的方式打开user.txt文件
    FILE *fp = fopen("D:\\user.txt","r+");
    if(fp == NULL)
    {
        printf("文件未找到");
        exit(-1);
    }
	
	//获取链表入口,也就是头结点
    pNode cur = pHead;
    while(1)
    {
	//从user.text循环读入所有数据并依次存于链表
        pNode temp = (pNode)malloc(sizeof(LNode));
        if(!temp)
            exit(-1);
            
		//下面fscanf是从文件读取信息,并存入节点的name变量和pass变量
        //如果fscanf的返回值不是2,则说明后面没有数据了,也即是录入完毕
		//检测到录入完毕后将分配的空间清除掉
        if(2!=fscanf(fp,"%s%s",temp->name,temp->pass))
        {
            free(temp);
            break;
        }
		cur->next=temp;
        cur = temp;
        cur->next = NULL;
    }
    return pHead;
}

//登录函数
int login(pNode head)
{
    if(NULL==head->next)
    {
        printf("暂无用户\n");
        getchar();
        return 0;
    }
    char name[10];
    char pass[10];
    printf("\t\t请输入你的用户名:");
    scanf("%s",name);
    printf("\t\t请输入你的密码:");
    scanf("%s",pass);
    pNode temp = head->next;
    while(temp)
    {
        if(0==strcmp(temp->name,name) && 0==strcmp(temp->pass,pass))
        {
            printf("\t\t成功登录\n");
            getchar();
            return 1;
        }
        temp = temp->next;
    }
    printf("未找到该用户\n");
    getch();
    return 1;
}

//写入txt文件,每一行存在一个用户
void writeToFile(pNode head)
{
    FILE *fw = fopen("D:\\user.txt","a+");
    pNode temp=head->next;
    if(temp==NULL){
        return;
    }
	
    while(temp){
        fprintf(fw,temp->name);
        fprintf(fw,"\t");
        fprintf(fw,temp->pass);
        fprintf(fw,"\n");
        temp  = temp->next;
    }
}


//注册用户
void registerUser(pNode head)
{
    pNode temp = head->next;
    //当表中无用户直接在头结点后注册
    if(!temp)
    {
        temp = (pNode)malloc(sizeof(LNode));
        head->next = temp;
    }
    else
    {
        //表中有用户则在最后一个节点后生成新节点
        while(temp->next)
        {
            temp = temp->next;
        }
        pNode last = (pNode)malloc(sizeof(LNode));
        temp->next = last;
        temp = last;
    }
    printf("\t\t请输入你的用户名:");
    scanf("%s",temp->name);
    printf("\t\t请输入你的密码:");
    scanf("%s",temp->pass);
    temp->next=NULL;
	printf("\t\t注册成功\n");
}

int menu()
{
    int choice;
    printf("\t\t1.登录\n");
    printf("\t\t2.注册\n");
    printf("\t\t#.退出\n");
    printf("\t\t请输入你的选择:");
    scanf("%d",&choice);
    return choice;
}
void comment()
{
    char comm[250];
    FILE *rf;
    rf=fopen("D:\\comment.txt","a");
    printf("\t\t请输入你的留言:\n");
    scanf("%s",comm);
    printf("\n");
    time_t t;
    struct tm *tim;
    t=time(NULL);
    tim=localtime(&t);
    fprintf(rf,"留言时间:%s留言内容: %s\n",asctime(tim),comm);
    printf("\t\t留言成功!\n");
    fclose(rf);
}
/***************************************************************查看留言********************************************************************/
void checkcomment()
{
    char check[1024];
    FILE *rf;
    rf=fopen("D:\\comment.txt","r");
    int len;
    printf("                                                以下为留言内容:\n");
    printf("\n");
    while(fgets(check,1024,rf)!=NULL)
    {
        len=strlen(check);
        printf("\t                                        %s\n",check);
    }
    printf("\n");
    fclose(rf);
}
void menu1()										//主菜单
{
	printf("\n\n");
	printf("\t\t              欢迎使用华东交通大学导游系统       \n");
	printf("\t\t      --------------------------------------------\n");
	printf("\t\t     |                                            |\n");
	printf("\t\t     |               O(∩_∩)O~~                  |\n");
	printf("\t\t     |                                            |\n");
	printf("\t\t     |        1.显示校园平面图.                   |\n");
	printf("\t\t     |        2.查询任意场所的相关信息.           |\n");
	printf("\t\t     |        3.校门口到各个场所的最短路径.       |\n");
	printf("\t\t     |        4.任意场所的问路查询.               |\n");
	printf("\t\t     |        5.两点之间的所有简单路径            |\n");
    printf("\t\t     |        6.留下你对华东交通大学的评价        |\n");
    printf("\t\t     |        7.查看评价                          |\n");
    printf("\t\t     |        8.退出                              |\n");
	printf("\t\t     |                                            |\n");
	printf("\t\t     |                                            |\n");
	printf("\t\t     |                                            |\n");
	printf("\t\t      --------------------------------------------\n");
    printf("\t*******************************景点编号***************************\n");
    printf("\t------------------------------------------------------------------\n");
    printf("\t1.校门      2.教学楼         3.马克思楼      4.超市      5。宿舍(40)\n");
    printf("\t6.餐厅      7.菜鸟驿站       8.礼堂          9.共享单车  10.图书馆\n");
    printf("\t11.养心湖   12.汽车站        13.宾馆         14.宿舍(20) 15.体育馆\n ");
    printf("\t16.医院     17.基础实验大楼  18.银行         19.公园     20.小吃街\n");
    printf("\t------------------------------------------------------------------\n");
    printf("\n\t\t\t       请输入您要进行的操作的序号          \n");
}
void mess()								//查看学校中各景点信息
{
	int x;
	printf("请输入要查询场所的序号1 - 20(0 键结束):");
	while(scanf("%d",&x) == 1)
	{
		if(x == 0)break;
		switch(x)
		{
			case  1  :
                printf("景点编号:1\n"); 
                printf("景点名称:华东交通大学校门\n");
                printf("景点介绍:华东交通大学校门是连接南北区的地方.\n");
                break;
			case  2  :
                printf("景点编号:2\n");
                printf("景点名称:教学楼\n");
                printf("景点介绍:学生上课与老师办公的大楼.\n");
                break;
			case  3  :
                printf("景点编号:3\n");
                printf("景点名称:马克思主义楼\n");
                printf("景点介绍:马克思主义好啊!马克思主义原理上课的地方.\n");   
                break;
			case  4  :
                printf("景点编号:4\n");
                printf("景点名称:超市\n");
                printf("景点介绍:超市卖了学生日常所需的生活用品与好吃的..\n");
                break;
			case  5  :
                printf("景点编号:5\n");
                printf("景点名称:40栋宿舍\n");
                printf("景点介绍:40栋宿舍,男生的地狱,没有空调!.\n");
                break;
			case  6  :
                printf("景点编号:6\n");
                printf("景点名称:食堂\n");
                printf("景点介绍:学校食堂,里面有好多好吃的,3楼黄焖鸡挺好吃.\n");
                break;
			case  7  :
                printf("景点编号:7\n");
                printf("景点名称:菜鸟驿站\n");
                printf("景点介绍:每天都有许多快递进来,简直是女生的天堂!.\n");
                break;
			case  8  :
                printf("景点编号:8\n");
                printf("景点名称:礼堂\n");
                printf("景点介绍:礼堂是举行活动的地方(各种晚会)以及学术讲座.\n");
                break;
			case  9  :
                printf("景点编号:9\n");
                printf("景点名称:共享单车站点\n");
                printf("景点介绍:共享单车停靠点,为学生提供了许多遍历.\n");
                break;
            case  10 :
                printf("景点编号:10\n");
                printf("景点名称:图书馆\n");
                printf("景点介绍:交大标志性建筑,里面有许多书,平时会有许多学生来看书和自习.\n");
                break;
            case  11 :
                printf("景点编号:11\n");
                printf("景点名称:养心湖\n");
                printf("景点介绍:修身养性的地方.\n");
                break;
            case  12 :
                printf("景点编号:12\n");
                printf("景点名称:汽车站\n");
                printf("景点名称:学生放假去.\n");
                break;
            case  13 :
                printf("景点编号:13\n");
                printf("景点名称:宾馆\n");
                printf("景点介绍:提供休息处.\n");
                break;
            case  14 :
                printf("景点编号:14\n");
                printf("景点名称:20栋宿舍\n");
                printf("景点介绍:女生的天堂,有空调.\n");
                break;
            case  15 :
                printf("景点编号:15\n");
                printf("景点名称:体育馆\n");
                printf("景点介绍:里面可以做许多活动,篮球、乒乓球、网球.....\n");
                break;
            case  16 :
                printf("景点编号:16\n");
                printf("景点名称:医院\n");
                printf("景点介绍:给学生提供医疗保障.\n");
                break;
            case  17 :
                printf("景点编号:17\n");
                printf("景点名称:基础实验大楼\n");
                printf("景点介绍:里面可以做许多实验,是一个好去处哟.\n");
                break;
            case  18 :
                printf("景点编号:18\n");
                printf("景点名称:银行\n");
                printf("景点介绍:当然是取钱的地方啦,你懂得.\n");
                break;
			case  19 :
                printf("景点编号:19\n");
                printf("景点名称:公园\n");
                printf("景点介绍:有许多景色,不过不适合单身狗去玩.\n");
                break;
            case  20 :
                printf("景点编号:20\n");
                printf("景点名称:小吃店\n");
                printf("景点介绍:里面有许多特色小吃呀!\n");
                break;
            default  :break;
		}
		printf("\n请输入要查询场所的序号1 - 20 (0 键结束):");
	}
}
void plan(){
    printf("=====================================================华东交大平面图===========================================================================\n");
    printf("----18--------------------------------------------------------------13----------------------4-----------------12------------------------------\n");
    printf("|| 银行 ||-------------------------|| ||宿舍(20)||---------------||宾馆|| ||-------------||超市||----------||汽车站||-----------------------||\n");
    printf("=========                       ||    =========14                 ======                 =======           =========                        ||\n");
    printf("||     |                     ||           ||                       ||                      ||                                         ======= \n");
    printf("||        |==-==        ||                ||                       ||                        ||==================== ==================|| 图 ||\n");
    printf("||             ||   ||                    ||                       || 2             3          ||    5                  6            ||  书 ||\n");
    printf("||========||======||=======||==========||========||              ||======||---- ||=====||------||========||========||======||======= ||  馆 ||\n"); 
    printf("||基础实验大楼||   ||医院 16||          ||体育馆 15||             || 教学楼||     ||马克思|| ||  ||  宿舍  ||         || 餐厅 ||        ======\n");
    printf("||===========||    =========         |  =========                =========       =======   ||    ======            ========               10||\n");
    printf("||     17                           |               ||         ||                          ||                         ||                    || \n");
    printf("||                                 |                   ||=====||                           ||                         ||                    ||\n");
    printf("||                                |                    ||校门 1||                          ||                         ||                    ||\n");
    printf("||                               |                      ======                             ||                         ||                    ||\n");
    printf("||                        ================                ||                               ||                         ||                    ||\n");
    printf("||                      ||               ||               ||                               ||                         ||             ||=====||\n");
    printf("||                      ||       养      ||               ||                               ||                         ||             || 礼堂||\n");
    printf("||                      ||       心   11 ||            ||======||                  ||======||                         ||=============||=====||\n");
    printf("||                      ||       湖      ||           || 20小吃店||=================|| 菜鸟 ||=========================||                  8||\n");
    printf("||                       ================              ||======||                  || 驿站 ||                         ||                    ||\n");
    printf("||                    ||                 |                ||                       ||======||                         ||                    ||\n");
    printf("||                  ||                    |               ||                            7                             ||                    ||\n");
    printf("||          ==  ||                         |              ||                                                          ||                    ||\n");
    printf("||=======||                                 |             ||                                                          ||                    ||\n");
    printf("||19 公园||                                   |           ||                                                          ||                    ||\n");
    printf("||=======||                                    |          ||                                                                                ||\n");
    printf("||                                               |        ||                                                                                ||\n");
    printf("||                                                 | = |  ||=========||                                                                     ||\n");
    printf("||========================================================= 共享单车 9||                                                                    ||\n");
    printf("||------------------------------------------------------------------------------------------------------------------------------------------||\n");
}
void dijkstra(int s,Graph &M){
    fill(M.d,M.d+maxv,inf);
    for(int i = 1;i <= n; i++){
        M.pre[i] = i;
    }
    M.d[s] = 0;
    for(int i = 1;i <= n; i++){
        int u = -1,min = inf;
        for(int j = 1;j <= n; j++){
            if(!M.vis[j]&&M.d[j]<min){
                min = M.d[j];
                u = j;
            }
        }
        M.vis[u] = 1;
        for(int v = 1;v <= n; v++){
            if(!M.vis[v]&&M.d[u]+M.G[u][v]<M.d[v]){
                M.d[v] = M.G[u][v]+M.d[u];
                M.pre[v] = u;
            }
        }
    }
}
void dijkstra1(int s,Graph &M){
    fill(M.d,M.d+maxv,inf);
    for(int i = 1;i <= n; i++){
        M.pre[i] = i;
    }
    M.d[s] = 0;
    for(int i = 1;i <= n; i++){
        int u = -1,min = inf;
        for(int j = 1;j <= n; j++){
            if(!M.vis[j]&&M.d[j]<min){
                min = M.d[j];
                u = j;
            }
        }
        M.vis[u] = 1;
        for(int v = 1;v <= n; v++){
            if(!M.vis[v]&&M.d[u]+M.G1[u][v]<M.d[v]){
                M.d[v] = M.G1[u][v]+M.d[u];
                M.pre[v] = u;
            }
        }
    }
}
void DFS(int s,int v,Graph &M){
    if(v==s){
        printf("%s",mean[s]);
        return;
    }
    DFS(s,M.pre[v],M);
    printf("->%s",mean[v]);
}
void init(Graph &M){
    fill(M.G[0],M.G[0]+maxv*maxv,inf);
    memset(M.vis,0,sizeof(M.vis));
    M.G[1][2] = M.G[2][1] = 100;
    M.G[1][4] = M.G[4][1] = 800;
    M.G[1][13] = M.G[13][1] = 600;
    M.G[1][7] = M.G[7][1] = 300;
    M.G[1][20] = M.G[20][1] = 250;
    M.G[1][11] = M.G[11][1] = 200;
    M.G[1][14] = M.G[14][1] = 500;
    M.G[1][15] = M.G[15][1] = 250;
    M.G[2][3] = M.G[3][2] = 100;
    M.G[3][5] = M.G[5][3] = 100;
    M.G[3][4] = M.G[4][3] = 500;
    M.G[3][7] = M.G[7][3] = 500;
    M.G[4][12] = M.G[12][4] = 300;
    M.G[4][13] = M.G[13][4] = 400;
    M.G[4][6] = M.G[6][4] = 550;
    M.G[5][6] = M.G[6][5] = 100;
    M.G[6][10] = M.G[10][6] = 300;
    M.G[6][7] = M.G[7][6] = 300;
    M.G[6][8] = M.G[8][6] = 250;
    M.G[7][20] = M.G[20][7] = 100;
    M.G[7][8] = M.G[8][7] = 200;
    M.G[8][10] = M.G[10][8] = 500;
    M.G[9][11] = M.G[11][9] = 400;
    M.G[9][19] = M.G[19][9] = 2000;
    M.G[9][20] = M.G[20][9] = 200;
    M.G[10][12] = M.G[12][10] = 300;
    M.G[11][19] = M.G[19][11] = 500;
    M.G[11][15] = M.G[15][11] = 100;
    M.G[13][14] = M.G[14][13] = 250;
    M.G[14][15] = M.G[15][14] = 250;
    M.G[14][16] = M.G[16][14] = 500;
    M.G[14][18] = M.G[18][14] = 350;
    M.G[15][16] = M.G[16][15] = 300;
    M.G[16][17] = M.G[17][16] = 100;
    M.G[16][18] = M.G[18][16] = 500;
    M.G[17][18] = M.G[18][17] = 700;
    M.G[17][19] = M.G[19][17] = 1000;
}

void init1(Graph &M){
    fill(M.G1[0],M.G1[0]+maxv*maxv,inf);
    memset(M.vis,0,sizeof(M.vis));
    M.G1[1][2] =M.G1[2][1] = 100;
    M.G1[1][4] = M.G1[4][1] = 800;
    M.G1[1][13] = M.G1[13][1] = 600;
    M.G1[1][7] = M.G1[7][1] = 300;
    M.G1[1][20] = M.G1[20][1] = 250;
    //G1[1][11] = G1[11][1] = 200;
    M.G1[1][14] = M.G1[14][1] = 500;
    M.G1[1][15] = M.G1[15][1] = 250;
    M.G1[2][3] = M.G1[3][2] = 100;
    M.G1[3][5] = M.G1[5][3] = 100;
    M.G1[3][4] = M.G1[4][3] = 500;
    M.G1[3][7] = M.G1[7][3] = 500;
    M.G1[4][12] = M.G1[12][4] = 300;
    M.G1[4][13] = M.G1[13][4] = 400;
    //G1[4][6] = G1[6][4] = 550;
    M.G1[5][6] = M.G1[6][5] = 100;
    M.G1[6][10] = M.G1[10][6] = 300;
    M.G1[6][7] = M.G1[7][6] = 300;
    M.G1[6][8] = M.G1[8][6] = 250;
    M.G1[7][20] = M.G1[20][7] = 100;
    M.G1[7][8] = M.G1[8][7] = 200;
    M.G1[8][10] = M.G1[10][8] = 500;
    //G1[9][11] = G1[11][9] = 400;
    M.G1[9][19] = M.G1[19][9] = 2000;
    M.G1[9][20] = M.G1[20][9] = 200;
    M.G1[10][12] = M.G1[12][10] = 300;
    M.G1[11][19] = M.G1[19][11] = 500;
    //G1[11][15] = G1[15][11] = 100;
    M.G1[13][14] = M.G1[14][13] = 250;
    M.G1[13][15] = M.G1[15][13] = 700;
    M.G1[14][15] = M.G1[15][14] = 250;
    M.G1[14][16] = M.G1[16][14] = 500;
    M.G1[14][18] = M.G1[18][14] = 350;
    M.G1[15][16] = M.G1[16][15] = 300;
    M.G1[15][18] = M.G1[18][15] = 800;
    M.G1[16][17] = M.G1[17][16] = 100;
    M.G1[16][18] = M.G1[18][16] = 500;
    M.G1[16][19] = M.G1[19][16] = 1050;
    M.G1[17][18] = M.G1[18][17] = 700;
    M.G1[17][19] = M.G1[19][17] = 1000;
}
void DFSall(Graph &M,int s,int e){
    int i,j;
    int flag = 0;
    M.vis[s] = 1;
    way[count1] = s;
    for(i = 1;i <= n; i++){
        if(M.G[s][i]!=inf&&M.vis[i]==0&&i!=e){
            count1++;
            way[count1] = i;
            DFSall(M,i,e);
            M.vis[i] = 0;
            count1--;
            flag = 0;
            continue;
        }
        if(M.G[s][i]!=inf && M.vis[i]==0 && i==e && flag==0){
            count1++;
            way[count1] = e;
            flag = 1;
            printf("\n");
            printf("\t%s",mean[way[0]]);
            for(j = 1;j <= count1; j++){
                printf("->");
                printf("%s",mean[way[j]]);
            }
            count1--;
            return;
        }
    }
    return;
}
void ALLpath(Graph M){
    memset(M.vis,0,sizeof(M.vis));
    int start,end;
    printf("请输入起点:\n");
    scanf("%d",&start);
    printf("请输入终点:\n");
    scanf("%d",&end);
    printf("%s到%s的所有路径为:\n",mean[start],mean[end]);
    count1 = 0;
    DFSall(M,start,end);
    printf("\n");
}
int main1(){
    menu1();
    int flag;
    int flag1;
    int start,end;

    while(scanf("%d",&flag)==1){
        Graph M;
        switch(flag){
            case 1: plan();break;
            case 2: mess();break;
            case 3:
                printf("请输入你的交通方式(1:驾车,2:步行\n");
                scanf("%d",&flag1);
                if(flag1==1){
                    init1(M);
                    dijkstra1(1,M);
                    for(int i = 2;i <= n; i++){
                        printf("%s到%s的最短距离为%d\n",mean[1],mean[i],M.d[i]);
                        printf("最短路径为:\n");
                        DFS(1,i,M);
                        printf("\n");
                    } 
                }else{
                    init(M);
                    dijkstra(1,M);
                    for(int i = 2;i <= n; i++){
                        printf("%s到%s的最短距离为%d\n",mean[1],mean[i],M.d[i]);
                        printf("最短路径为:\n");
                        DFS(1,i,M);
                        printf("\n");
                    } 
                }
                break;
            case 4:
                printf("请输入您的交通方式(1:驾车,2:步行)\n");
                scanf("%d",&flag1);
                if(flag1==1){    
                    init1(M);
                    printf("请输入起点和终点:\n");
                    scanf("%d%d",&start,&end);
                    dijkstra1(start,M);
                    printf("%s到%s的最短距离为%d\n",mean[start],mean[end],M.d[end]);
                    printf("最短路径为:\n");
                    DFS(start,end,M);
                    printf("\n");
                }else{
                    init(M);
                    printf("请输入起点和终点:\n");
                    scanf("%d%d",&start,&end);
                    dijkstra(start,M);
                    printf("%s到%s的最短距离为%d\n",mean[start],mean[end],M.d[end]);
                    printf("最短路径为:\n");
                    DFS(start,end,M);
                    printf("\n");
                }
                break;
            case 5:
                printf("请输入您的交通方式(1:驾车,2:步行)\n");
                scanf("%d",&flag1);
                if(flag1==1){
                    init1(M);
                    ALLpath(M);
                }else{
                    init(M);
                    ALLpath(M);
                }
                break;
            case 6:
                comment();
                break;
            case 7:
                checkcomment();
                break;
            default : return 0;
        }
        printf("请输入你的选择:\n");
    }
    
    system("pause");
    return 0;
}


int main()
{
    int choice;
    pNode head = createList();
    while(1)
    {
        choice = menu();
        if(1==choice)
        {
            system("cls");
            if(login(head))
            {
                main1();
            }
            //system("cls");
        }
        else if(2==choice)
        {
            system("cls");
            registerUser(head);
			writeToFile(head);
		    //system("cls");
        }
        else
        {
            return 0;
        }
    }
}

论文在资源里,更详细的讲解都在论文里,适合第一次写论文的看,可以学到许多东西。代码与论文有问题的话,欢迎各位指正。

最后

对待自己温柔一点。你只不过是宇宙的孩子,与植物、星辰没有什么两样。

  • 37
    点赞
  • 172
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
校园导游咨询系统的数据结构可以使用邻接矩阵来表示地图和景点信息。邻接矩阵是一个二维数组,其中行和列分别表示景点的编号,矩阵中的元素表示两个景点之间是否存在道路或路径。 具体来说,可以使用一个二维数组来表示邻接矩阵,数组的大小为n×n,其中n表示景点的数量。如果两个景点之间存在道路或路径,则对应的矩阵元素为1,否则为0。此外,可以使用一个数组来存储景点的信息,每个元素包含景点的名称、介绍等相关信息。 以下是一个示例的数据结构: ```python class CampusGuidingSystem: def __init__(self, num_vertices): self.num_vertices = num_vertices self.adj_matrix = [[0] * num_vertices for _ in range(num_vertices)] self.vertices = [] def add_vertex(self, name, description): self.vertices.append({'name': name, 'description': description}) def add_edge(self, start, end): self.adj_matrix[start][end] = 1 self.adj_matrix[end][start] = 1 def remove_edge(self, start, end): self.adj_matrix[start][end] = 0 self.adj_matrix[end][start] = 0 def get_shortest_path(self, start, end): # 使用最短路径算法计算从start到end的最短路径 pass def get_shortest_route(self, start, end): # 使用最短路径算法计算从start到end的最短路线 pass ``` 以上代码是一个简化的示例,其中`add_vertex`用于添加景点,`add_edge`用于添加道路,`remove_edge`用于删除道路,`get_shortest_path`用于计算最短路径,`get_shortest_route`用于计算最短路线。
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值